deblan.tv/vendor/trinity/src/Trinity/Bundle/MediaBundle/Model/om/BaseTypeQuery.php
2015-03-02 21:57:49 +01:00

868 lines
31 KiB
PHP

<?php
namespace Trinity\Bundle\MediaBundle\Model\om;
use \Criteria;
use \Exception;
use \ModelCriteria;
use \ModelJoin;
use \PDO;
use \Propel;
use \PropelCollection;
use \PropelException;
use \PropelObjectCollection;
use \PropelPDO;
use Trinity\Bundle\MediaBundle\Model\Media;
use Trinity\Bundle\MediaBundle\Model\Type;
use Trinity\Bundle\MediaBundle\Model\TypePeer;
use Trinity\Bundle\MediaBundle\Model\TypeQuery;
/**
* @method TypeQuery orderById($order = Criteria::ASC) Order by the id column
* @method TypeQuery orderByLabel($order = Criteria::ASC) Order by the label column
* @method TypeQuery orderByIcon($order = Criteria::ASC) Order by the icon column
* @method TypeQuery orderByThumbnail($order = Criteria::ASC) Order by the thumbnail column
* @method TypeQuery orderByMimes($order = Criteria::ASC) Order by the mimes column
* @method TypeQuery orderByCreatedAt($order = Criteria::ASC) Order by the created_at column
* @method TypeQuery orderByUpdatedAt($order = Criteria::ASC) Order by the updated_at column
* @method TypeQuery orderBySortableRank($order = Criteria::ASC) Order by the sortable_rank column
* @method TypeQuery orderBySlug($order = Criteria::ASC) Order by the slug column
*
* @method TypeQuery groupById() Group by the id column
* @method TypeQuery groupByLabel() Group by the label column
* @method TypeQuery groupByIcon() Group by the icon column
* @method TypeQuery groupByThumbnail() Group by the thumbnail column
* @method TypeQuery groupByMimes() Group by the mimes column
* @method TypeQuery groupByCreatedAt() Group by the created_at column
* @method TypeQuery groupByUpdatedAt() Group by the updated_at column
* @method TypeQuery groupBySortableRank() Group by the sortable_rank column
* @method TypeQuery groupBySlug() Group by the slug column
*
* @method TypeQuery leftJoin($relation) Adds a LEFT JOIN clause to the query
* @method TypeQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query
* @method TypeQuery innerJoin($relation) Adds a INNER JOIN clause to the query
*
* @method TypeQuery leftJoinMedia($relationAlias = null) Adds a LEFT JOIN clause to the query using the Media relation
* @method TypeQuery rightJoinMedia($relationAlias = null) Adds a RIGHT JOIN clause to the query using the Media relation
* @method TypeQuery innerJoinMedia($relationAlias = null) Adds a INNER JOIN clause to the query using the Media relation
*
* @method Type findOne(PropelPDO $con = null) Return the first Type matching the query
* @method Type findOneOrCreate(PropelPDO $con = null) Return the first Type matching the query, or a new Type object populated from the query conditions when no match is found
*
* @method Type findOneByLabel(string $label) Return the first Type filtered by the label column
* @method Type findOneByIcon(string $icon) Return the first Type filtered by the icon column
* @method Type findOneByThumbnail(string $thumbnail) Return the first Type filtered by the thumbnail column
* @method Type findOneByMimes(string $mimes) Return the first Type filtered by the mimes column
* @method Type findOneByCreatedAt(string $created_at) Return the first Type filtered by the created_at column
* @method Type findOneByUpdatedAt(string $updated_at) Return the first Type filtered by the updated_at column
* @method Type findOneBySortableRank(int $sortable_rank) Return the first Type filtered by the sortable_rank column
* @method Type findOneBySlug(string $slug) Return the first Type filtered by the slug column
*
* @method array findById(int $id) Return Type objects filtered by the id column
* @method array findByLabel(string $label) Return Type objects filtered by the label column
* @method array findByIcon(string $icon) Return Type objects filtered by the icon column
* @method array findByThumbnail(string $thumbnail) Return Type objects filtered by the thumbnail column
* @method array findByMimes(string $mimes) Return Type objects filtered by the mimes column
* @method array findByCreatedAt(string $created_at) Return Type objects filtered by the created_at column
* @method array findByUpdatedAt(string $updated_at) Return Type objects filtered by the updated_at column
* @method array findBySortableRank(int $sortable_rank) Return Type objects filtered by the sortable_rank column
* @method array findBySlug(string $slug) Return Type objects filtered by the slug column
*/
abstract class BaseTypeQuery extends ModelCriteria
{
/**
* Initializes internal state of BaseTypeQuery object.
*
* @param string $dbName The dabase name
* @param string $modelName The phpName of a model, e.g. 'Book'
* @param string $modelAlias The alias for the model in this query, e.g. 'b'
*/
public function __construct($dbName = 'default', $modelName = 'Trinity\\Bundle\\MediaBundle\\Model\\Type', $modelAlias = null)
{
parent::__construct($dbName, $modelName, $modelAlias);
}
/**
* Returns a new TypeQuery object.
*
* @param string $modelAlias The alias of a model in the query
* @param TypeQuery|Criteria $criteria Optional Criteria to build the query from
*
* @return TypeQuery
*/
public static function create($modelAlias = null, $criteria = null)
{
if ($criteria instanceof TypeQuery) {
return $criteria;
}
$query = new TypeQuery();
if (null !== $modelAlias) {
$query->setModelAlias($modelAlias);
}
if ($criteria instanceof Criteria) {
$query->mergeWith($criteria);
}
return $query;
}
/**
* Find object by primary key.
* Propel uses the instance pool to skip the database if the object exists.
* Go fast if the query is untouched.
*
* <code>
* $obj = $c->findPk(12, $con);
* </code>
*
* @param mixed $key Primary key to use for the query
* @param PropelPDO $con an optional connection object
*
* @return Type|Type[]|mixed the result, formatted by the current formatter
*/
public function findPk($key, $con = null)
{
if ($key === null) {
return null;
}
if ((null !== ($obj = TypePeer::getInstanceFromPool((string) $key))) && !$this->formatter) {
// the object is alredy in the instance pool
return $obj;
}
if ($con === null) {
$con = Propel::getConnection(TypePeer::DATABASE_NAME, Propel::CONNECTION_READ);
}
$this->basePreSelect($con);
if ($this->formatter || $this->modelAlias || $this->with || $this->select
|| $this->selectColumns || $this->asColumns || $this->selectModifiers
|| $this->map || $this->having || $this->joins) {
return $this->findPkComplex($key, $con);
} else {
return $this->findPkSimple($key, $con);
}
}
/**
* Alias of findPk to use instance pooling
*
* @param mixed $key Primary key to use for the query
* @param PropelPDO $con A connection object
*
* @return Type A model object, or null if the key is not found
* @throws PropelException
*/
public function findOneById($key, $con = null)
{
return $this->findPk($key, $con);
}
/**
* Find object by primary key using raw SQL to go fast.
* Bypass doSelect() and the object formatter by using generated code.
*
* @param mixed $key Primary key to use for the query
* @param PropelPDO $con A connection object
*
* @return Type A model object, or null if the key is not found
* @throws PropelException
*/
protected function findPkSimple($key, $con)
{
$sql = 'SELECT `id`, `label`, `icon`, `thumbnail`, `mimes`, `created_at`, `updated_at`, `sortable_rank`, `slug` FROM `media_type` WHERE `id` = :p0';
try {
$stmt = $con->prepare($sql);
$stmt->bindValue(':p0', $key, PDO::PARAM_INT);
$stmt->execute();
} catch (Exception $e) {
Propel::log($e->getMessage(), Propel::LOG_ERR);
throw new PropelException(sprintf('Unable to execute SELECT statement [%s]', $sql), $e);
}
$obj = null;
if ($row = $stmt->fetch(PDO::FETCH_NUM)) {
$obj = new Type();
$obj->hydrate($row);
TypePeer::addInstanceToPool($obj, (string) $key);
}
$stmt->closeCursor();
return $obj;
}
/**
* Find object by primary key.
*
* @param mixed $key Primary key to use for the query
* @param PropelPDO $con A connection object
*
* @return Type|Type[]|mixed the result, formatted by the current formatter
*/
protected function findPkComplex($key, $con)
{
// As the query uses a PK condition, no limit(1) is necessary.
$criteria = $this->isKeepQuery() ? clone $this : $this;
$stmt = $criteria
->filterByPrimaryKey($key)
->doSelect($con);
return $criteria->getFormatter()->init($criteria)->formatOne($stmt);
}
/**
* Find objects by primary key
* <code>
* $objs = $c->findPks(array(12, 56, 832), $con);
* </code>
* @param array $keys Primary keys to use for the query
* @param PropelPDO $con an optional connection object
*
* @return PropelObjectCollection|Type[]|mixed the list of results, formatted by the current formatter
*/
public function findPks($keys, $con = null)
{
if ($con === null) {
$con = Propel::getConnection($this->getDbName(), Propel::CONNECTION_READ);
}
$this->basePreSelect($con);
$criteria = $this->isKeepQuery() ? clone $this : $this;
$stmt = $criteria
->filterByPrimaryKeys($keys)
->doSelect($con);
return $criteria->getFormatter()->init($criteria)->format($stmt);
}
/**
* Filter the query by primary key
*
* @param mixed $key Primary key to use for the query
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterByPrimaryKey($key)
{
return $this->addUsingAlias(TypePeer::ID, $key, Criteria::EQUAL);
}
/**
* Filter the query by a list of primary keys
*
* @param array $keys The list of primary key to use for the query
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterByPrimaryKeys($keys)
{
return $this->addUsingAlias(TypePeer::ID, $keys, Criteria::IN);
}
/**
* Filter the query on the id column
*
* Example usage:
* <code>
* $query->filterById(1234); // WHERE id = 1234
* $query->filterById(array(12, 34)); // WHERE id IN (12, 34)
* $query->filterById(array('min' => 12)); // WHERE id >= 12
* $query->filterById(array('max' => 12)); // WHERE id <= 12
* </code>
*
* @param mixed $id The value to use as filter.
* Use scalar values for equality.
* Use array values for in_array() equivalent.
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterById($id = null, $comparison = null)
{
if (is_array($id)) {
$useMinMax = false;
if (isset($id['min'])) {
$this->addUsingAlias(TypePeer::ID, $id['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($id['max'])) {
$this->addUsingAlias(TypePeer::ID, $id['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(TypePeer::ID, $id, $comparison);
}
/**
* Filter the query on the label column
*
* Example usage:
* <code>
* $query->filterByLabel('fooValue'); // WHERE label = 'fooValue'
* $query->filterByLabel('%fooValue%'); // WHERE label LIKE '%fooValue%'
* </code>
*
* @param string $label The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterByLabel($label = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($label)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $label)) {
$label = str_replace('*', '%', $label);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(TypePeer::LABEL, $label, $comparison);
}
/**
* Filter the query on the icon column
*
* Example usage:
* <code>
* $query->filterByIcon('fooValue'); // WHERE icon = 'fooValue'
* $query->filterByIcon('%fooValue%'); // WHERE icon LIKE '%fooValue%'
* </code>
*
* @param string $icon The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterByIcon($icon = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($icon)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $icon)) {
$icon = str_replace('*', '%', $icon);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(TypePeer::ICON, $icon, $comparison);
}
/**
* Filter the query on the thumbnail column
*
* Example usage:
* <code>
* $query->filterByThumbnail('fooValue'); // WHERE thumbnail = 'fooValue'
* $query->filterByThumbnail('%fooValue%'); // WHERE thumbnail LIKE '%fooValue%'
* </code>
*
* @param string $thumbnail The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterByThumbnail($thumbnail = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($thumbnail)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $thumbnail)) {
$thumbnail = str_replace('*', '%', $thumbnail);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(TypePeer::THUMBNAIL, $thumbnail, $comparison);
}
/**
* Filter the query on the mimes column
*
* Example usage:
* <code>
* $query->filterByMimes('fooValue'); // WHERE mimes = 'fooValue'
* $query->filterByMimes('%fooValue%'); // WHERE mimes LIKE '%fooValue%'
* </code>
*
* @param string $mimes The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterByMimes($mimes = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($mimes)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $mimes)) {
$mimes = str_replace('*', '%', $mimes);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(TypePeer::MIMES, $mimes, $comparison);
}
/**
* Filter the query on the created_at column
*
* Example usage:
* <code>
* $query->filterByCreatedAt('2011-03-14'); // WHERE created_at = '2011-03-14'
* $query->filterByCreatedAt('now'); // WHERE created_at = '2011-03-14'
* $query->filterByCreatedAt(array('max' => 'yesterday')); // WHERE created_at > '2011-03-13'
* </code>
*
* @param mixed $createdAt The value to use as filter.
* Values can be integers (unix timestamps), DateTime objects, or strings.
* Empty strings are treated as NULL.
* Use scalar values for equality.
* Use array values for in_array() equivalent.
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterByCreatedAt($createdAt = null, $comparison = null)
{
if (is_array($createdAt)) {
$useMinMax = false;
if (isset($createdAt['min'])) {
$this->addUsingAlias(TypePeer::CREATED_AT, $createdAt['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($createdAt['max'])) {
$this->addUsingAlias(TypePeer::CREATED_AT, $createdAt['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(TypePeer::CREATED_AT, $createdAt, $comparison);
}
/**
* Filter the query on the updated_at column
*
* Example usage:
* <code>
* $query->filterByUpdatedAt('2011-03-14'); // WHERE updated_at = '2011-03-14'
* $query->filterByUpdatedAt('now'); // WHERE updated_at = '2011-03-14'
* $query->filterByUpdatedAt(array('max' => 'yesterday')); // WHERE updated_at > '2011-03-13'
* </code>
*
* @param mixed $updatedAt The value to use as filter.
* Values can be integers (unix timestamps), DateTime objects, or strings.
* Empty strings are treated as NULL.
* Use scalar values for equality.
* Use array values for in_array() equivalent.
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterByUpdatedAt($updatedAt = null, $comparison = null)
{
if (is_array($updatedAt)) {
$useMinMax = false;
if (isset($updatedAt['min'])) {
$this->addUsingAlias(TypePeer::UPDATED_AT, $updatedAt['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($updatedAt['max'])) {
$this->addUsingAlias(TypePeer::UPDATED_AT, $updatedAt['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(TypePeer::UPDATED_AT, $updatedAt, $comparison);
}
/**
* Filter the query on the sortable_rank column
*
* Example usage:
* <code>
* $query->filterBySortableRank(1234); // WHERE sortable_rank = 1234
* $query->filterBySortableRank(array(12, 34)); // WHERE sortable_rank IN (12, 34)
* $query->filterBySortableRank(array('min' => 12)); // WHERE sortable_rank >= 12
* $query->filterBySortableRank(array('max' => 12)); // WHERE sortable_rank <= 12
* </code>
*
* @param mixed $sortableRank The value to use as filter.
* Use scalar values for equality.
* Use array values for in_array() equivalent.
* Use associative array('min' => $minValue, 'max' => $maxValue) for intervals.
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterBySortableRank($sortableRank = null, $comparison = null)
{
if (is_array($sortableRank)) {
$useMinMax = false;
if (isset($sortableRank['min'])) {
$this->addUsingAlias(TypePeer::SORTABLE_RANK, $sortableRank['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($sortableRank['max'])) {
$this->addUsingAlias(TypePeer::SORTABLE_RANK, $sortableRank['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(TypePeer::SORTABLE_RANK, $sortableRank, $comparison);
}
/**
* Filter the query on the slug column
*
* Example usage:
* <code>
* $query->filterBySlug('fooValue'); // WHERE slug = 'fooValue'
* $query->filterBySlug('%fooValue%'); // WHERE slug LIKE '%fooValue%'
* </code>
*
* @param string $slug The value to use as filter.
* Accepts wildcards (* and % trigger a LIKE)
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterBySlug($slug = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($slug)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $slug)) {
$slug = str_replace('*', '%', $slug);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(TypePeer::SLUG, $slug, $comparison);
}
/**
* Filter the query by a related Media object
*
* @param Media|PropelObjectCollection $media the related object to use as filter
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return TypeQuery The current query, for fluid interface
* @throws PropelException - if the provided filter is invalid.
*/
public function filterByMedia($media, $comparison = null)
{
if ($media instanceof Media) {
return $this
->addUsingAlias(TypePeer::ID, $media->getTypeId(), $comparison);
} elseif ($media instanceof PropelObjectCollection) {
return $this
->useMediaQuery()
->filterByPrimaryKeys($media->getPrimaryKeys())
->endUse();
} else {
throw new PropelException('filterByMedia() only accepts arguments of type Media or PropelCollection');
}
}
/**
* Adds a JOIN clause to the query using the Media relation
*
* @param string $relationAlias optional alias for the relation
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
*
* @return TypeQuery The current query, for fluid interface
*/
public function joinMedia($relationAlias = null, $joinType = Criteria::LEFT_JOIN)
{
$tableMap = $this->getTableMap();
$relationMap = $tableMap->getRelation('Media');
// create a ModelJoin object for this join
$join = new ModelJoin();
$join->setJoinType($joinType);
$join->setRelationMap($relationMap, $this->useAliasInSQL ? $this->getModelAlias() : null, $relationAlias);
if ($previousJoin = $this->getPreviousJoin()) {
$join->setPreviousJoin($previousJoin);
}
// add the ModelJoin to the current object
if ($relationAlias) {
$this->addAlias($relationAlias, $relationMap->getRightTable()->getName());
$this->addJoinObject($join, $relationAlias);
} else {
$this->addJoinObject($join, 'Media');
}
return $this;
}
/**
* Use the Media relation Media object
*
* @see useQuery()
*
* @param string $relationAlias optional alias for the relation,
* to be used as main alias in the secondary query
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
*
* @return \Trinity\Bundle\MediaBundle\Model\MediaQuery A secondary query class using the current class as primary query
*/
public function useMediaQuery($relationAlias = null, $joinType = Criteria::LEFT_JOIN)
{
return $this
->joinMedia($relationAlias, $joinType)
->useQuery($relationAlias ? $relationAlias : 'Media', '\Trinity\Bundle\MediaBundle\Model\MediaQuery');
}
/**
* Exclude object from result
*
* @param Type $type Object to remove from the list of results
*
* @return TypeQuery The current query, for fluid interface
*/
public function prune($type = null)
{
if ($type) {
$this->addUsingAlias(TypePeer::ID, $type->getId(), Criteria::NOT_EQUAL);
}
return $this;
}
// timestampable behavior
/**
* Filter by the latest updated
*
* @param int $nbDays Maximum age of the latest update in days
*
* @return TypeQuery The current query, for fluid interface
*/
public function recentlyUpdated($nbDays = 7)
{
return $this->addUsingAlias(TypePeer::UPDATED_AT, time() - $nbDays * 24 * 60 * 60, Criteria::GREATER_EQUAL);
}
/**
* Order by update date desc
*
* @return TypeQuery The current query, for fluid interface
*/
public function lastUpdatedFirst()
{
return $this->addDescendingOrderByColumn(TypePeer::UPDATED_AT);
}
/**
* Order by update date asc
*
* @return TypeQuery The current query, for fluid interface
*/
public function firstUpdatedFirst()
{
return $this->addAscendingOrderByColumn(TypePeer::UPDATED_AT);
}
/**
* Filter by the latest created
*
* @param int $nbDays Maximum age of in days
*
* @return TypeQuery The current query, for fluid interface
*/
public function recentlyCreated($nbDays = 7)
{
return $this->addUsingAlias(TypePeer::CREATED_AT, time() - $nbDays * 24 * 60 * 60, Criteria::GREATER_EQUAL);
}
/**
* Order by create date desc
*
* @return TypeQuery The current query, for fluid interface
*/
public function lastCreatedFirst()
{
return $this->addDescendingOrderByColumn(TypePeer::CREATED_AT);
}
/**
* Order by create date asc
*
* @return TypeQuery The current query, for fluid interface
*/
public function firstCreatedFirst()
{
return $this->addAscendingOrderByColumn(TypePeer::CREATED_AT);
}
// sortable behavior
/**
* Filter the query based on a rank in the list
*
* @param integer $rank rank
*
* @return TypeQuery The current query, for fluid interface
*/
public function filterByRank($rank)
{
return $this
->addUsingAlias(TypePeer::RANK_COL, $rank, Criteria::EQUAL);
}
/**
* Order the query based on the rank in the list.
* Using the default $order, returns the item with the lowest rank first
*
* @param string $order either Criteria::ASC (default) or Criteria::DESC
*
* @return TypeQuery The current query, for fluid interface
*/
public function orderByRank($order = Criteria::ASC)
{
$order = strtoupper($order);
switch ($order) {
case Criteria::ASC:
return $this->addAscendingOrderByColumn($this->getAliasedColName(TypePeer::RANK_COL));
break;
case Criteria::DESC:
return $this->addDescendingOrderByColumn($this->getAliasedColName(TypePeer::RANK_COL));
break;
default:
throw new PropelException('TypeQuery::orderBy() only accepts "asc" or "desc" as argument');
}
}
/**
* Get an item from the list based on its rank
*
* @param integer $rank rank
* @param PropelPDO $con optional connection
*
* @return Type
*/
public function findOneByRank($rank, PropelPDO $con = null)
{
return $this
->filterByRank($rank)
->findOne($con);
}
/**
* Returns the list of objects
*
* @param PropelPDO $con Connection to use.
*
* @return mixed the list of results, formatted by the current formatter
*/
public function findList($con = null)
{
return $this
->orderByRank()
->find($con);
}
/**
* Get the highest rank
*
* @param PropelPDO optional connection
*
* @return integer highest position
*/
public function getMaxRank(PropelPDO $con = null)
{
if ($con === null) {
$con = Propel::getConnection(TypePeer::DATABASE_NAME);
}
// shift the objects with a position lower than the one of object
$this->addSelectColumn('MAX(' . TypePeer::RANK_COL . ')');
$stmt = $this->doSelect($con);
return $stmt->fetchColumn();
}
/**
* Reorder a set of sortable objects based on a list of id/position
* Beware that there is no check made on the positions passed
* So incoherent positions will result in an incoherent list
*
* @param array $order id => rank pairs
* @param PropelPDO $con optional connection
*
* @return boolean true if the reordering took place, false if a database problem prevented it
*/
public function reorder(array $order, PropelPDO $con = null)
{
if ($con === null) {
$con = Propel::getConnection(TypePeer::DATABASE_NAME);
}
$con->beginTransaction();
try {
$ids = array_keys($order);
$objects = $this->findPks($ids, $con);
foreach ($objects as $object) {
$pk = $object->getPrimaryKey();
if ($object->getSortableRank() != $order[$pk]) {
$object->setSortableRank($order[$pk]);
$object->save($con);
}
}
$con->commit();
return true;
} catch (PropelException $e) {
$con->rollback();
throw $e;
}
}
// sluggable behavior
/**
* Find one object based on its slug
*
* @param string $slug The value to use as filter.
* @param PropelPDO $con The optional connection object
*
* @return Type the result, formatted by the current formatter
*/
public function findOneBySlug($slug, $con = null)
{
return $this->filterBySlug($slug)->findOne($con);
}
}