Yii Query DB, когда `где` иногда может быть all (*) (пропускайте один или несколько операторов where при необходимости) - PullRequest
0 голосов
/ 09 января 2019

Yii Запрос с несколькими условиями, когда один или несколько условий иногда могут быть «получены все», как в *

Я попытался полностью пропустить соответствующее условие статуса, но это явно нарушило код.

$orders = Orders::find()
 ->where(['currency' => $filterCurrency])
if ($filterStatus !== null){
 ->where(['status' => $filterStatus])    
}
->all();

Текущий код:

$filterCurrency = 'eur';
$filterStatus = null; // but can e.g. be 'Draft'

$orders = Orders::find()
 ->where(['currency' => $filterCurrency, 'status' => $filterStatus])
 ->all();

Я ищу результат, если, например, $filterStatus имеет значение *, тогда в идеале оно вообще не будет включено в запрос, поэтому столбец состояния не будет частью запроса вообще.

1 Ответ

0 голосов
/ 09 января 2019

Это должно сделать это. Ключ состоит в том, чтобы разбить его на запрос и использовать andWhere только при необходимости.

$filterCurrency = 'eur';
$filterStatus = null; // but can e.g. be 'Draft'

$ordersQuery = Orders::find()
  ->where(['currency' => $filterCurrency]);

if ($filterStatus != '*') {
  $ordersQuery->andWhere(['status' => $filterStatus]);
}

$orders = $ordersQuery->all();
...