Cake\ElasticSearch\Query::order PHP Method

order() public method

The accepted format for the $order parameter is: - [['name' => ['order'=> 'asc', ...]], ['price' => ['order'=> 'asc', ...]]] - ['name' => 'asc', 'price' => 'desc'] - 'field1' (defaults to order => 'desc')
public order ( string | array $order, boolean $overwrite = false )
$order string | array The sorting order to use.
$overwrite boolean Whether or not to replace previous sorting.
    public function order($order, $overwrite = false)
    {
        // [['field' => [...]], ['field2' => [...]]]
        if (is_array($order) && is_numeric(key($order))) {
            if ($overwrite) {
                $this->_parts['order'] = $order;
                return $this;
            }
            $this->_parts['order'] = array_merge($order, $this->_parts['order']);
            return $this;
        }
        if (is_string($order)) {
            $order = [$order => ['order' => 'desc']];
        }
        $normalizer = function ($order, $key) {
            // ['field' => 'asc|desc']
            if (is_string($order)) {
                return [$key => ['order' => $order]];
            }
            return [$key => $order];
        };
        $order = collection($order)->map($normalizer)->toList();
        if (!$overwrite) {
            $order = array_merge($this->_parts['order'], $order);
        }
        $this->_parts['order'] = $order;
        return $this;
    }