首页 > 解决方案 > 如何动态修改 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() 的结果有什么区别?

标签: laraveleloquent

解决方案


$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


推荐阅读