/** * Prepare certain search condition * * @param \Doctrine\ORM\QueryBuilder $queryBuilder Query builder to prepare * @param array $value Condition data * @param boolean $countOnly "Count only" flag. Do not need to add "order by" clauses if only count is needed. * * @return void */ protected function prepareCndOrderBy(\Doctrine\ORM\QueryBuilder $queryBuilder, array $value, $countOnly) { list($sort, $order) = $this->getSortOrderValue($value); if ('r.bought' == $sort) { if (!$countOnly) { $queryBuilder->linkLeft('p.order_items')->linkLeft('order_items.order')->linkLeft('order.paymentStatus')->andWhere('(paymentStatus.id IS NULL OR ' . $queryBuilder->expr()->in('paymentStatus.code', \XLite\Model\Order\Status\Payment::getPaidStatuses()) . ')')->addSelect('sum(order_items.amount) as product_amount')->addOrderBy('product_amount', $order); } $value = array('translations.name', $order); } parent::prepareCndOrderBy($queryBuilder, $value, $countOnly); }
/** * Prepare certain search condition * * @param \Doctrine\ORM\QueryBuilder $queryBuilder Query builder to prepare * @param array $value Condition data * @param boolean $countOnly "Count only" flag. Do not need to add "order by" clauses if only count is needed. * * @return void */ protected function prepareCndOrderBy(\Doctrine\ORM\QueryBuilder $queryBuilder, array $value, $countOnly) { if (!$countOnly) { list($sort, $order) = $this->getSortOrderValue($value); if ('r.rating' == $sort) { $queryBuilder->linkLeft('p.reviews', 'r'); $queryBuilder->addSelect('SUM(r.rating) as rsm'); $sort = 'rsm'; $queryBuilder->addOrderBy($sort, $order); } else { parent::prepareCndOrderBy($queryBuilder, $value, $countOnly); } } }