laravel - 如何动态修改 eloquent 查询?
问题描述
我有一个简单的 Eloquent 查询,可将数据返回到网格。网格(Nayjest)对它可以使用的数据非常特别,所以我被困在使用“newQuery()”功能。
$query = (new Position)
->newQuery()
->select('*')
->where('positions.Active', '=', 'A');
该查询正在驱动我的应用程序报告功能,因此每个报告可能有多达 10 个不同的 WHERE 参数。
$query = (new Position)
->newQuery()
->select('*')
->where('positions.company','like','Z%')
->wherebetween('positions.posno',['1000','3500'])
->where('positions.Active', '=', 'A');
报表查询参数都是数据驱动的,我可以轻松解析出每个 WHERE 命令,但是如何动态地将 WHERE 拼凑到整体查询中,使其正常工作?
Eloquent 是否有任何类型的“宏替换”功能?这就是我过去实现这一目标的方式(这是我第一次使用 Eloquent)。我怎么能做这样的事情?-->
$Where1="->wherebetween('positions.posno',['1000','3500'])"
$query = (new Position)
->newQuery()
->select('*')
&Where1
&Where2
&Where3
&Where4
;
如果我使用传统的 Eloquent 语法,拼凑 wheres 并以“Get()”结束,那么我可以运行查询,但网格不会接受它作为数据源。newQuery() 与 Get() 的结果有什么区别?
解决方案
$query = (new Position)
->newQuery()
->select('*')
->where(function($query){
$query->where('positions.company','like','Z%')
->wherebetween('positions.posno',['1000','3500'])
->where('positions.Active', '=', 'A');
});
所有 where 都嵌套在一个包装 where 中,这将导致一个 SQL 查询,其中 &where 用于所有包装的 where
推荐阅读
- java - [Java with Docker-compose]: java.io.FileNotFoundException: /var/lib/data/17.txt (没有这样的文件或目录)
- python - 禁用“pip install”慢速连接超时
- powershell - 我将如何选择要在其上运行 ADSI 命令的服务器?
- javascript - Javascript 按索引比较 2 个数组,而不是按 2 个数组共有的值的总数
- android - 迁移到androidx后,android应用类出现ClassNotFound异常
- c++ - 如何理解 C++ 中链表的 freelist 实现?
- perforce - 如何检测更改列表是否删除了经典 Perforce 仓库中的分支
- swift - 我们可以在 xcuitest 中使用 Notification Center 来监听内部事件吗?
- python - Pandas 根据 A 列中的行值更新 B 列中的行值
- typescript - 输入具有相同字段名称但类型不同的 for