예제 #1
0
 /**
  * @param QueryInterface $query
  * @param string         $order
  */
 public function __invoke(QueryInterface $query, $order)
 {
     if (strpos($order, '-') === 0) {
         $direction = 'DESC';
         $order = substr($order, 1);
     } else {
         $direction = null;
     }
     $query->getQueryBuilder()->orderBy($order, $direction);
 }
예제 #2
0
 /**
  * @param QueryInterface $query
  * @param string         $order
  */
 public function __invoke(QueryInterface $query, $order)
 {
     $separatedOrders = $this->getOrderBys($order);
     foreach ($separatedOrders as $order) {
         $order = trim($order);
         if (strpos($order, '-') === 0) {
             $direction = 'DESC';
             $order = substr($order, 1);
         } else {
             $direction = null;
         }
         $query->getQueryBuilder()->addOrderBy($order, $direction);
     }
 }
예제 #3
0
 /**
  * Relation fields can allow filters on the relations fetched. For now this is limited
  * to the id field because of the possible complexity of fetching and filtering
  * all the related data.
  *
  * For example the following queries:
  *     'pages', {'relationkey'=>'1'}
  *     'pages', {'relationkey'=>'1 || 2 || 3'}.
  *
  * Because the search is actually on the join table, we replace the
  * expression to filter the join side rather than on the main side.
  *
  * @param QueryInterface $query
  * @param ClassMetadata  $metadata
  */
 public function query(QueryInterface $query, ClassMetadata $metadata)
 {
     $field = $this->mapping['fieldname'];
     foreach ($query->getFilters() as $filter) {
         if ($filter->getKey() == $field) {
             // This gets the method name, one of andX() / orX() depending on type of expression
             $method = strtolower($filter->getExpressionObject()->getType()) . 'X';
             $newExpr = $query->getQueryBuilder()->expr()->{$method}();
             foreach ($filter->getParameters() as $k => $v) {
                 $newExpr->add("{$field}.to_id = :{$k}");
             }
             $filter->setExpression($newExpr);
         }
     }
 }
예제 #4
0
 /**
  * @param QueryInterface $query
  * @param int            $limit
  */
 public function __invoke(QueryInterface $query, $limit)
 {
     $query->getQueryBuilder()->setMaxResults($limit);
 }
예제 #5
0
 /**
  * @param QueryInterface $query
  */
 public function __invoke(QueryInterface $query)
 {
     $query->getQueryBuilder()->setMaxResults(1);
     $query->setSingleFetchMode(true);
 }