getConnection(Propel::CONNECTION_WRITE); } $con->beginTransaction(); try { foreach ($this as $element) { $element->save($con); } $con->commit(); } catch (PropelException $e) { $con->rollback(); throw $e; } } /** * Delete all the elements in the collection */ public function delete($con = null) { if (null === $con) { $con = $this->getConnection(Propel::CONNECTION_WRITE); } $con->beginTransaction(); try { foreach ($this as $element) { $element->delete($con); } $con->commit(); } catch (PropelException $e) { $con->rollback(); throw $e; } } /** * Get an array of the primary keys of all the objects in the collection * * @return array The list of the primary keys of the collection */ public function getPrimaryKeys($usePrefix = true) { $ret = array(); foreach ($this as $key => $obj) { $key = $usePrefix ? ($this->getModel() . '_' . $key) : $key; $ret[$key]= $obj->getPrimaryKey(); } return $ret; } /** * Populates the collection from an array * Each object is populated from an array and the result is stored * Does not empty the collection before adding the data from the array * * @param array $arr */ public function fromArray($arr) { $class = $this->getModel(); foreach ($arr as $element) { $obj = new $class(); $obj->fromArray($element); $this->append($obj); } } /** * Get an array representation of the collection * Each object is turned into an array and the result is returned * * @param string $keyColumn If null, the returned array uses an incremental index. * Otherwise, the array is indexed using the specified column * @param boolean $usePrefix If true, the returned array prefixes keys * with the model class name ('Article_0', 'Article_1', etc). * * * $bookCollection->toArray(); * array( * 0 => array('Id' => 123, 'Title' => 'War And Peace'), * 1 => array('Id' => 456, 'Title' => 'Don Juan'), * ) * $bookCollection->toArray('Id'); * array( * 123 => array('Id' => 123, 'Title' => 'War And Peace'), * 456 => array('Id' => 456, 'Title' => 'Don Juan'), * ) * $bookCollection->toArray(null, true); * array( * 'Book_0' => array('Id' => 123, 'Title' => 'War And Peace'), * 'Book_1' => array('Id' => 456, 'Title' => 'Don Juan'), * ) * * @return array */ public function toArray($keyColumn = null, $usePrefix = false) { $ret = array(); $keyGetterMethod = 'get' . $keyColumn; foreach ($this as $key => $obj) { $key = null === $keyColumn ? $key : $obj->$keyGetterMethod(); $key = $usePrefix ? ($this->getModel() . '_' . $key) : $key; $ret[$key] = $obj->toArray(); } return $ret; } /** * Get an array representation of the collection * * @param string $keyColumn If null, the returned array uses an incremental index. * Otherwise, the array is indexed using the specified column * @param boolean $usePrefix If true, the returned array prefixes keys * with the model class name ('Article_0', 'Article_1', etc). * * * $bookCollection->getArrayCopy(); * array( * 0 => $book0, * 1 => $book1, * ) * $bookCollection->getArrayCopy('Id'); * array( * 123 => $book0, * 456 => $book1, * ) * $bookCollection->getArrayCopy(null, true); * array( * 'Book_0' => $book0, * 'Book_1' => $book1, * ) * * @return array */ public function getArrayCopy($keyColumn = null, $usePrefix = false) { if (null === $keyColumn && false === $usePrefix) { return parent::getArrayCopy(); } $ret = array(); $keyGetterMethod = 'get' . $keyColumn; foreach ($this as $key => $obj) { $key = null === $keyColumn ? $key : $obj->$keyGetterMethod(); $key = $usePrefix ? ($this->getModel() . '_' . $key) : $key; $ret[$key] = $obj; } return $ret; } /** * Get an associative array representation of the collection * The first parameter specifies the column to be used for the key, * And the seconf for the value. * * $res = $coll->toKeyValue('Id', 'Name'); * * * @return array */ public function toKeyValue($keyColumn = 'PrimaryKey', $valueColumn = null) { $ret = array(); $keyGetterMethod = 'get' . $keyColumn; $valueGetterMethod = (null === $valueColumn) ? '__toString' : ('get' . $valueColumn); foreach ($this as $obj) { $ret[$obj->$keyGetterMethod()] = $obj->$valueGetterMethod(); } return $ret; } /** * Makes an additional query to populate the objects related to the collection objects * by a certain relation * * @param string $relation Relation name (e.g. 'Book') * @param Criteria $criteria Optional Criteria object to filter the related object collection * @param PropelPDO $con Optional connection object * * @return PropelObjectCollection the list of related objects */ public function populateRelation($relation, $criteria = null, $con = null) { if (!Propel::isInstancePoolingEnabled()) { throw new PropelException('populateRelation() needs instance pooling to be enabled prior to populating the collection'); } $relationMap = $this->getFormatter()->getTableMap()->getRelation($relation); if ($this->isEmpty()) { // save a useless query and return an empty collection $coll = new PropelObjectCollection(); $coll->setModel($relationMap->getRightTable()->getPhpName()); return $coll; } $symRelationMap = $relationMap->getSymmetricalRelation(); // query the db for the related objects $useMethod = 'use' . $symRelationMap->getName() . 'Query'; $query = PropelQuery::from($relationMap->getRightTable()->getPhpName()); if (null !== $criteria) { $query->mergeWith($criteria); } $relatedObjects = $query ->$useMethod() ->filterByPrimaryKeys($this->getPrimaryKeys()) ->endUse() ->find($con); // associate the related objects to the main objects if ($relationMap->getType() == RelationMap::ONE_TO_MANY) { $getMethod = 'get' . $symRelationMap->getName(); $addMethod = 'add' . $relationMap->getName(); foreach ($relatedObjects as $object) { $mainObj = $object->$getMethod(); // instance pool is used here to avoid a query $mainObj->$addMethod($object); } } elseif ($relationMap->getType() == RelationMap::MANY_TO_ONE) { // nothing to do; the instance pool will catch all calls to getRelatedObject() // and return the object in memory } else { throw new PropelException('populateRelation() does not support this relation type'); } return $relatedObjects; } } ?>