. */ namespace Doctrine\ORM\Persisters; use Doctrine\ORM\PersistentCollection; /** * Persister for one-to-many collections. * * This persister is only used for uni-directional one-to-many mappings. * * @since 2.0 * @author Roman Borschel */ class OneToManyPersister extends AbstractCollectionPersister { /** * {@inheritdoc} * * @param $coll * @return * @override */ protected function _getDeleteRowSql(PersistentCollection $coll) { $mapping = $coll->getMapping(); $targetClass = $this->_em->getClassMetadata($mapping->getTargetEntityName()); $table = $targetClass->getTableName(); $ownerMapping = $targetClass->getAssociationMapping($mapping->getMappedByFieldName()); $setClause = ''; foreach ($ownerMapping->getSourceToTargetKeyColumns() as $sourceCol => $targetCol) { if ($setClause != '') $setClause .= ', '; $setClause .= "$sourceCol = NULL"; } $whereClause = ''; foreach ($targetClass->getIdentifierColumnNames() as $idColumn) { if ($whereClause != '') $whereClause .= ' AND '; $whereClause .= "$idColumn = ?"; } return array("UPDATE $table SET $setClause WHERE $whereClause", $this->_uow->getEntityIdentifier($element)); } protected function _getInsertRowSql() { return "UPDATE xxx SET foreign_key = yyy WHERE foreign_key = zzz"; } /* Not used for OneToManyPersister */ protected function _getUpdateRowSql() { return; } }