Упорядочить по логическим - PullRequest
0 голосов
/ 27 марта 2020

У меня есть таблица products, которая содержит столбец on_sale и определяется как tinyint или boolean. Так что, если в базе данных он имеет значение 1 или true, то это продукт продажи и, альтернативно, 0 или false не продукт продажи. Я хочу отобразить их для того, чтобы продажи были на первом месте, а остальные - на них. Таким образом, в этом случае все продукты со значением true / 1 отображаются первыми.

Проблема в том, что я не могу сделать это с помощью встроенного order метода.

Вот мой код:

          $products = $products->find('all',$this->filterConditions($display))           
            ->where(function (QueryExpression $exp, Query $q) use ($productIds) {
                return $exp->in('id', $productIds);
            });

        /*** Paginate */
        $this->products = $this->Paginator->paginate($products, [
            'limit' => 18,
        ]);

И затем фильтр функция условий

 protected function filterConditions($display)
    {
        $conditions = [];

        switch ($display){
            case 'ASC' :
                $conditions['order'] = 'price ASC';
                break;
            case 'DESC' :
                $conditions['order'] = 'price DESC';
                break;
            case 'saleproducts' :
                $conditions['order'] = 'on_sale DESC';
                break;
            default : $conditions['order'] = '-priority DESC';
        }

        return $conditions;
    }

ASC, DESC и priority Порядок работает нормально, но не работает с on_sale

Я заметил, что если я удалю эту часть

->where(function (QueryExpression $exp, Query $q) use ($productIds) {
                return $exp->in('id', $productIds);
            });

Тогда заказ работает нормально. Единственная проблема в том, что мне нужны эти $productIds - то есть array кстати

Есть идеи?

Спасибо!

...