У меня есть таблица 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
кстати
Есть идеи?
Спасибо!