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');