/** * @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); }
/** * @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); } }
/** * 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); } } }
/** * @param QueryInterface $query * @param int $limit */ public function __invoke(QueryInterface $query, $limit) { $query->getQueryBuilder()->setMaxResults($limit); }
/** * @param QueryInterface $query */ public function __invoke(QueryInterface $query) { $query->getQueryBuilder()->setMaxResults(1); $query->setSingleFetchMode(true); }