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