/** * @param $onTableAliasName * @return null|string */ protected function resolveJoinsForForARelationAttributeThatIsAHasOne($onTableAliasName) { assert('is_string($onTableAliasName)'); $tableJoinIdName = 'id'; $onTableJoinIdName = $this->modelAttributeToDataProviderAdapter->getColumnName(); $onTableAliasName = $this->joinTablesAdapter->addLeftTableAndGetAliasName($this->modelAttributeToDataProviderAdapter->getRelationTableName(), $onTableJoinIdName, $onTableAliasName, $tableJoinIdName); return $onTableAliasName; }
public function testAllMethodsOnAttributeOnSameModelAndRelatedAttribute() { $adapter = new RedBeanModelAttributeToDataProviderAdapter('I', 'j', 'jMember'); $this->assertEquals('I', $adapter->getModelClassName()); $this->assertEquals('j', $adapter->getAttribute()); $this->assertEquals('jMember', $adapter->getRelatedAttribute()); $this->assertEquals('i', $adapter->getModelTableName()); $this->assertEquals('I', $adapter->getAttributeModelClassName()); $this->assertEquals('i', $adapter->getAttributeTableName()); $this->assertEquals('j_id', $adapter->getColumnName()); $this->assertTrue($adapter->isRelation()); $this->assertTrue($adapter->hasRelatedAttribute()); $this->assertEquals('J', $adapter->getRelationModelClassName()); $this->assertEquals('J', $adapter->getRelatedAttributeModelClassName()); $this->assertEquals('j', $adapter->getRelationTableName()); $this->assertEquals('j', $adapter->getRelatedAttributeTableName()); $this->assertEquals('jmember', $adapter->getRelatedAttributeColumnName()); $this->assertFalse($adapter->isRelatedAttributeRelation()); }
protected static function buildJoinForManyToManyRelatedAttributeAndGetWhereClauseData(RedBeanModelAttributeToDataProviderAdapter $modelAttributeToDataProviderAdapter, $joinTablesAdapter) { assert('$modelAttributeToDataProviderAdapter->getRelatedAttribute() != null'); assert('$joinTablesAdapter instanceof RedBeanModelJoinTablesQueryAdapter'); assert('$modelAttributeToDataProviderAdapter->getRelationType() == RedBeanModel::MANY_MANY'); $relationTableName = $modelAttributeToDataProviderAdapter->getRelationTableName(); $onTableAliasName = self::resolveShouldAddFromTableAndGetAliasName($modelAttributeToDataProviderAdapter, $joinTablesAdapter); $manyToManyTables = array($relationTableName, $onTableAliasName); sort($manyToManyTables); $relationJoiningTableAliasName = $joinTablesAdapter->addLeftTableAndGetAliasName(implode('_', $manyToManyTables), "id", $onTableAliasName, $modelAttributeToDataProviderAdapter->getAttributeTableName() . '_id'); //if this is not the id column, then add an additional left join. if ($modelAttributeToDataProviderAdapter->getRelatedAttribute() != 'id') { $joinTablesAdapter->setSelectDistinctToTrue(); $relationTableAliasName = $joinTablesAdapter->addLeftTableAndGetAliasName($relationTableName, $relationTableName . '_id', $relationJoiningTableAliasName, 'id'); $relationAttributeTableAliasName = $relationTableAliasName; $whereClauseRelationColumnNameToUse = $modelAttributeToDataProviderAdapter->getRelatedAttributeColumnName(); } else { $whereClauseRelationColumnNameToUse = $relationTableName . '_id'; $relationAttributeTableAliasName = $relationJoiningTableAliasName; } return array($relationAttributeTableAliasName, $whereClauseRelationColumnNameToUse); }