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;
}
}
?>