Использовать andWhere под условием IF в Yii2

Просто быстрый вопрос.
Мне нужно создать запрос поиска в Yii2, где andWhere присутствует, только если переменная истинна.

public function getCheckBoxItems($holiday=false)
{
$Items = Items::find()->where(['type'=>'checkbox']);
Yii::info(print_r($Items,1), 'c');

if($holiday)
$Items->andWhere(['<>','category','holiday']);

$Items->All();
foreach($Items as $Item)
{
//do something
}
}

Это не работает

Однако эта работа работает, и я ожидал этого.

$Items = Items::find()->where(['type'=>'checkbox'])->andWhere(['<>','category','holiday'])->All();

Как мне только добавить andWhere на основе $holiday переменная

заранее спасибо

С уважением

Liam

ОБНОВИТЬ
я нашел один путь, но я уверен, что есть лучший путь

    if($holiday)
$Items = Items::find()->where(['type'=>'checkbox'])->andWhere(['<>','category','holiday'])->All();
else
$Items = Items::find()->where(['type'=>'checkbox'])->All();

0

Решение

Просто чтобы сделать ваш код более понятным и читаемым, вы должны просто попробовать:

$itemsQuery = Items::find()->where(['type'=>'checkbox']);

if($holiday)
$itemsQuery->andWhere(['<>','category','holiday']);

$items = $itemsQuery->all();
foreach($items as $item)
{
//do something
}
6

Другие решения

Вы должны хранить $items Результат на каждой контрольной точке:

public function getCheckBoxItems($holiday=false)
{
$Items = Items::find()->where(['type'=>'checkbox']);
Yii::info(print_r($Items,1), 'c');

if($holiday)
$Items->andWhere(['<>','category','holiday']);

$Items = $Items->All();
foreach($Items as $Item)
{
//do something
}
}
2

По вопросам рекламы [email protected]