Фильтр товаров только в наличии

#
Фильтр товаров только в наличии
Господа, поиском пользовался, но не нашел.

В норме в каталоге выводятся сначала все товары в наличии - потом не в наличии. У товаров не в наличии - сортировка 777.
При фильтрации сортировка не учитывается и все выводится вперемешку.

Есть задача сделать, чтобы при фильтрации товары не в наличии не попадали в список.

В ТДС я по-быстрому допилил следующее

         
$Shop_Controller_Show->shopItems()->queryBuilder()
->select('shop_items.*') //допилил для сортировки товаров только в наличии
->where('shop_items.sorting', '!=', 777)
            ->clearOrderBy()
            ->orderBy('absolute_price', $sorting == 1 ? 'ASC' : 'DESC');
      }

      $sorting == 3 && $Shop_Controller_Show->shopItems()->queryBuilder()
->select('shop_items.*') //допилил для сортировки товаров только в наличии
->where('shop_items.sorting', '!=', 777)
         ->clearOrderBy()
         ->orderBy('shop_items.name', 'ASC');


Интересно, что все заработало сразу же.
2 вопроса
1. Правильно ли я сделал? Ощущение, что что-то забыл))
2. Как сделать так, чтобы использовалось поле "остаток"?
Насколько я понимаю, сам запрос будет выглядеть так:
SELECT shop_items.* WHERE id in (SELECT shop_items_id from shop_warehouse_items WHERE count != 0)

Но я что-то не соображу, как его воткнуть в ТДС.
Если просто воткнуть
->where('shop_items.id', 'in', 'SELECT shop_items_id from shop_warehouse_items WHERE count != 0')

то это не работает...

Заранее спасибо за подсказку!
Модератор
#
Re: Фильтр товаров только в наличии
1. Кажется что можно упростить, но между двумя запросами фигурная скобка, видимо упростить не получится.
2.
->select(array('SUM(shop_warehouse_items.count)', 'rest'))
->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
->groupBy('shop_items.id')
->having('rest', '>', 0)
#
Re: Фильтр товаров только в наличии
$Shop_Controller_Show2->shopItems()
      ->queryBuilder()
->select('shop_items.*') //допилил для сортировки товаров только в наличии
->select(array('SUM(shop_warehouse_items.count)', 'rest'))
->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
->groupBy('shop_items.id')
->having('rest', '>', 0)
      ->clearOrderBy()
      ->orderBy('RAND()');


Как правильно отключить с 0 на складе?
Skype:ferdinant1988 ICQ:311960596 E-mail: ferdinant@i.ua
Авторизация