database - Yii Query DB when `where` 有时可以是全部(*)(必要时省略一个或多个 where 子句)
问题描述
当一个或多个 where 条件有时可以“获取所有”时,具有多个 where 条件的 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();
我正在寻找一个结果,如果 eg$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();
推荐阅读
- windbg - 在 WinDBG 中只重新加载一个符号
- c# - C# Bitmap.Save() 执行但未创建文件
- webrtc - RTCIceConnectionState.count 什么时候被解雇
- swift - SwiftUI 为什么会自动将变量传递给其他视图?
- xcode - 您可以更改 Xcode swiftui 预览默认值吗?
- r - tab_model() :呈现标准化系数,但保留原始(非标准化)系数的 p 值(星号)
- python - backtest.py BokehDeprecationWarning
- html - 获取类元素的索引
- r - 使用多个变量过滤两次并计算行数
- sql - 如何使用 case 语句计算状态