/** * @param $onTableAliasName * @return null|string */ protected function resolveJoinsForDerivedRelationViaCastedUpModelThatIsManyToMany($onTableAliasName) { assert('is_string($onTableAliasName)'); $opposingRelationModelClassName = $this->modelAttributeToDataProviderAdapter->getOpposingRelationModelClassName(); $opposingRelationTableName = $this->modelAttributeToDataProviderAdapter->getOpposingRelationTableName(); $relationJoiningTableAliasName = $this->joinTablesAdapter->addLeftTableAndGetAliasName($this->modelAttributeToDataProviderAdapter->getManyToManyTableNameForDerivedRelationViaCastedUpModel(), "id", $onTableAliasName, self::resolveForeignKey($opposingRelationTableName)); $onTableAliasName = $this->joinTablesAdapter->addLeftTableAndGetAliasName($opposingRelationTableName, self::resolveForeignKey($opposingRelationModelClassName), $relationJoiningTableAliasName, 'id'); return $onTableAliasName; }
/** * @param $onTableAliasName * @param bool $canUseFromJoins * @return null|string */ protected function resolveJoinsForDerivedRelationViaCastedUpModel($onTableAliasName, $canUseFromJoins = true) { assert('is_string($onTableAliasName)'); assert('is_bool($canUseFromJoins)'); //First cast up $onTableAliasName = $this->resolveJoinsForDerivedRelationViaCastedUpModelThatIsCastedUp($onTableAliasName, $canUseFromJoins); //Second build relation across to the opposing model $onTableAliasName = $this->resolveJoinsForDerivedRelationViaCastedUpModelThatIsManyToMany($onTableAliasName); //Third cast down if necessary if ($this->modelAttributeToDataProviderAdapter->isDerivedRelationViaCastedUpModelDifferentThanOpposingModelClassName()) { $opposingRelationModelClassName = $this->modelAttributeToDataProviderAdapter->getOpposingRelationModelClassName(); $derivedRelationModelClassName = $this->modelAttributeToDataProviderAdapter->getDerivedRelationViaCastedUpModelClassName(); $onTableAliasName = $this->resolveAndProcessLeftJoinsForAttributeThatIsCastedDownOrUp($opposingRelationModelClassName, $derivedRelationModelClassName, $onTableAliasName); } return $onTableAliasName; }