/** * Применяет JOIN для BELONGS_TO * @param ISelectBuilder $selectBuilder * @param BelongsToRelationField $relationField поле по которому осуществляется связь * @param string $relationSourceAlias алиас таблицы для $relationField * @param ICollection $targetCollection коллекция НА которую осуществляется связь * @return $this */ protected function applyJoinForBelongsToRelation(ISelectBuilder $selectBuilder, BelongsToRelationField $relationField, $relationSourceAlias, ICollection $targetCollection) { $targetTableName = $targetCollection->getMetadata()->getCollectionDataSource()->getSourceName(); $targetTableAlias = $relationSourceAlias . self::ALIAS_SEPARATOR . $relationField->getName(); $targetPk = $targetCollection->getIdentifyField(); $leftColumn = $targetTableAlias . self::FIELD_SEPARATOR . $targetPk->getColumnName(); $rightColumn = $relationSourceAlias . self::FIELD_SEPARATOR . $relationField->getColumnName(); $selectBuilder->leftJoin(array($targetTableName, $targetTableAlias))->on($leftColumn, '=', $rightColumn); return $this; }
/** * {@inheritdoc} */ public function storeNewBelongsToRelation(BelongsToRelationField $belongsToRelation, IObject $object, IObject $relatedObject) { $data = []; try { $data = $this->relatedObjects->offsetGet($object); } catch (\UnexpectedValueException $e) { } $data[$belongsToRelation->getName()] = $relatedObject; $this->relatedObjects->offsetSet($object, $data); }