. */ namespace Doctrine\ORM\Persisters; use Doctrine\ORM\PersistentCollection; /** * Persister for one-to-many collections. * * IMPORTANT: * This persister is only used for uni-directional one-to-many mappings on a foreign key * (which are not yet supported). So currently this persister is not used. * * @since 2.0 * @author Roman Borschel * @todo Complete implementation when the support for uni-directional one-to-many mappings * on a foreign key gets added. */ class OneToManyPersister extends AbstractCollectionPersister { /** * Generates the SQL UPDATE that updates a particular row's foreign * key to null. * * @param PersistentCollection $coll * @return string * @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(PersistentCollection $coll) { return "UPDATE xxx SET foreign_key = yyy WHERE foreign_key = zzz"; } /* Not used for OneToManyPersister */ protected function _getUpdateRowSql(PersistentCollection $coll) { return; } /** * Generates the SQL UPDATE that updates all the foreign keys to null. * * @param PersistentCollection $coll */ protected function _getDeleteSql(PersistentCollection $coll) { } /** * Gets the SQL parameters for the corresponding SQL statement to delete * the given collection. * * @param PersistentCollection $coll */ protected function _getDeleteSqlParameters(PersistentCollection $coll) {} /** * Gets the SQL parameters for the corresponding SQL statement to insert the given * element of the given collection into the database. * * @param PersistentCollection $coll * @param mixed $element */ protected function _getInsertRowSqlParameters(PersistentCollection $coll, $element) {} /** * Gets the SQL parameters for the corresponding SQL statement to delete the given * element from the given collection. * * @param PersistentCollection $coll * @param mixed $element */ protected function _getDeleteRowSqlParameters(PersistentCollection $coll, $element) {} }