Grupowanie towarów wg. ilości w sklepach

Towary powiązane z produktami i wersjami – zliczamy ilości w każdym sklepie

Przeszukiwanie różnych fragmentów tekstu rozdzielonych spacjami.

$search = preg_replace('/\s+/', '%', $search_str);

b1 – tytuł kolumny dla brand_id=1 – zawiera sumę ilości produktów w sklepie 1

$q = $q->select(['ItemPacks.product_id', 'ItemPacks.version_id']) 
       ->select(['b1' => $q->func()->sum('CASE WHEN brand_id = 1 THEN amount END')])    
       ->select(['b3' => $q->func()->sum('CASE WHEN brand_id = 3 THEN amount END')])    
       ->select(['b4' => $q->func()->sum('CASE WHEN brand_id = 4 THEN amount END')])    
       ->contain(['Versions' => function($q) {
                     return $q->select(['id', 'name', 'bg', 'color']);
                  },
                  'Products' => function($q){
                     return $q->select(['id', 'name']);
                  }
       ->where( function($expr) use ($search) {
              return $expr->or_( function($or) use ($search) {
                     return $or
                                ->like('Products.name', '%'.$search.'%')
                                ->like('Products.body', '%'.$search.'%');
                      });
               }) 
      ->group(['ItemPacks.product_id', 'ItemPacks.version_id'])    
                        ;
$items = $q->order('Products.name');

Dodaj komentarz