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