Yii Query DB when `where` sometimes can be all (*) (必要时省略一个或多个where子句)

Yii Query DB when `where` sometimes can be all (*) (omit one or more where clauses when necessary)

Yii 使用多个 where 条件查询,有时一个或多个 where 条件可以是 "get all",如 *

我试过像这样完全省略相关的状态子句,但这显然破坏了代码。

$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 的值为 *,那么理想情况下它根本不会包含在查询中,因此根本不会使状态列成为查询的一部分。

这应该可以做到。关键是将其分解为一个查询并仅在必要时使用 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();