ordering = $ordering; } /** * @param string $field * @return bool */ public function hasOrder(string $field):bool{ foreach ($this->ordering as $order){ if ($order instanceof OrderElement && $order->getField() == $field) { return true; } } return false; } /** * @param QueryBuilder $query * @param array $mappings * @return $this */ public function apply2Query(QueryBuilder $query, array $mappings) { foreach ($this->ordering as $order) { if ($order instanceof OrderElement) { if (isset($mappings[$order->getField()])) { $mapping = $mappings[$order->getField()]; $orders[$mapping] = $order->getDirection(); $query->addOrderBy($mapping, $order->getDirection()); } } } return $this; } /** * @param Criteria $criteria * @param array $mappings * @return $this */ public function apply2Criteria(Criteria $criteria, array $mappings) { $orders = []; foreach ($this->ordering as $order) { if ($order instanceof OrderElement) { if (isset($mappings[$order->getField()])) { $mapping = $mappings[$order->getField()]; $orders[$mapping] = $order->getDirection(); } } } if(count($orders) > 0) $criteria->orderBy($orders); return $this; } /** * @param array $mappings * @return string */ public function toRawSQL(array $mappings) { $sql = ' ORDER BY '; foreach ($this->ordering as $order) { if ($order instanceof OrderElement) { if (isset($mappings[$order->getField()])) { $mapping = $mappings[$order->getField()]; $sql .= sprintf('%s %s, ', $mapping, $order->getDirection()); } } } return substr($sql, 0 , strlen($sql) - 2); } }