Yii 查询数据库 当 'where' 有时可以是 all (*) (必要时省略一个或多个 where 子句)



Yii 查询具有多个 where 条件,当一个或多个 where 条件有时可以"全部获取"时,如 *

我尝试完全省略相关的状态条款,但这显然破坏了代码。

$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();

最新更新