<?php /* * $Id$ * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This software consists of voluntary contributions made by many individuals * and is licensed under the LGPL. For more information, see * <http://www.doctrine-project.org>. */ 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 <roman@code-factory.org> * @todo Remove */ 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['mappedBy']); $setClause = ''; foreach ($ownerMapping->sourceToTargetKeyColumns 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) {} }