Есть LEFT JOIN-ы которые циклом добавляются.
Код: Выделить всё
LEFT JOIN `shop_product_option` `po_cvet`
ON (`po`.`product_id` = `po_cvet`.`product_id`)
AND ((`po_cvet`.`slug`='sinij') AND (`po_cvet`.`slug_option`='cvet'))
LEFT JOIN `shop_product_option` `po_razmer`
ON (`po`.`product_id` = `po_razmer`.`product_id`)
AND ((`po_razmer`.`slug` IN ('77', '99')) AND (`po_razmer`.`slug_option`='razmer'))
Я пытаюсь сделать так:
Код: Выделить всё
$query = ProductOption::find()->alias('po');
foreach ($filters_array as $group => $filter) {
if ($group != $_group['slug_option']) {
$query->joinWith(['productOption' => function($q) use ($filter, $group) {
return $q->alias("po_{$group}")
->andOnCondition(['IN', "`po_{$group}`.slug", $filter])
->andOnCondition(["`po_{$group}`.slug_option" => $group]);
}]);
}
}
Код: Выделить всё
public function getProductOption()
{
return $this->hasMany(ProductOption::className(), ['product_id' => 'product_id']);
}
Можно конечно использовать $query->leftJoin и в нем ON прописать - это удобно, но как в нем andOnCondition чтобы оно добавилось не во WHERE главного запроса, а в AND leftJoin-а?