laravel - 在 Eloquent 中构建复杂的 WHERE 查询
问题描述
我已经有一段时间遇到麻烦了,我无法弄清楚(即使我知道这可能很简单)。我正在 Laravel 中迈出第一步,我想使用 Eloquent 构建这样的查询。
// This should be condition one
WHERE status NOT IN (4,99)
或者
// condition two
status NOT IN (4,99) AND ('column1' LIKE %XXXX% OR 'column2' LIKE %XXXX%)
我正在这样做:
$q->whereNotIn('order_stage_id', [99, 4])
->orWhere(function ($query) {
$query->whereNotIn('order_stage_id', [99, 4])
->orWhere('reference_number', 'like', '%'.$request->key.'%')
->orWhere('seller_remark', 'like', '%'.$request->key.'%')
->orWhere('companies.name', 'like', '%'.$request->key.'%')
->orWhere('users.name', 'like', '%'.$request->key.'%');
});
解决方案
根据您雄辩的代码,您当前的查询将如下所示:
WHERE order_stage_id NOT IN (4,99) OR ( WHERE order_stage_id NOT IN (4,99) OR reference_number LIKE %XXXX% OR ...)
您需要使用where()
方法来获取 SQLAND
运算符,然后使用闭包来嵌套orWhere()
方法。
$q->whereNotIn('order_stage_id',[99,4])
->orWhere(function($query) {
$query->whereNotIn('order_stage_id',[99,4])
->where(function($query) {
$query->where('column_1', 'like', '%XXX%')
->orWhere('column_2', 'like', '%XXX%')
->orWhere('column_2', 'like', '%XXX%');
});
});
不要忘记您需要将$request
对象传递给每个闭包才能访问它:
->where(function($query) use ($request) {
推荐阅读
- laravel - 整数 ID 在 Vue 组件中被四舍五入
- json - Elasticsearch 7.8.1:批量添加 json 错误无法读取数据
- mysql - MySQL JSON_OBJECT AGG 与非 AGG,以及它是如何工作的
- pdf - 如何减少/压缩非文本 PDF 的大小而质量损失很小?
- asp.net-core - 尝试在 .Net Core 3.1 Web API 上调用 PATCH 端点时出现 400 Bad Request 错误
- c++ - 初始化结构成员数组时出错
- php - 我在 Laravel 中建立了身份验证但不成功
- spring - 应用程序 yml 属性的 Spring SpEL 表达式评估
- flutter - 如何在颤动中将时间戳与当前时间进行比较
- magento - Ansible 任务失败,没有错误消息