【问题标题】:Laravel - How to make a multi-filter with array of objects?Laravel - 如何使用对象数组制作多过滤器?
【发布时间】:2021-06-23 14:06:52
【问题描述】:

因此,我正在尝试创建一种方法,在该方法中,我可以接收带有在我的数据库中进行搜索所需的参数的对象数组。 示例:

[{ "field": "name", "operator": "=", "term": "john" },
 { "field": "id", "operator": "=", "term": "3" }]

我收到了,我现在要做的是: 一个循环,我可以在 FIELD 上搜索我的数据库,其中 OPERATOR, TERM

我不知道我是否解释得很好,但我认为应该是这样的:

myForLoop ...
Table::where(FIELD, OPERATOR, TERM)

正确吗?怎么会有这样的方法?我是 laravel 的菜鸟。

提前谢谢大家!

【问题讨论】:

    标签: php laravel loops orm back


    【解决方案1】:

    你可以这样做

    $json='[{ "field": "name", "operator": "=", "term": "john" },
     { "field": "id", "operator": "=", "term": "3" }]';
    $data=json_decode($json);
    
    $result=ModelName::where(function ($query)use($data){
    
        if(isset($data)&&count($data)){
            foreach ($data as $value){
                $query->where($value->field,$value->operator,$value->term);
            }
        }
    
    })->get();
    

    $json='[{ "field": "name", "operator": "=", "term": "john" },{ "field": "id", "operator": "=", "term": "3" }]';
         
    $data=json_decode($json);
    
    $where=[];
    
    if(isset($data)&&count($data)){
        foreach($data as $value){
            $where[]=[$value->field,$value->operator,$value->term];
        }
    }
        
    $result=ModelName::where(function ($query)use($where){
        
        $query->where($where);
        
    })->get();
    

    【讨论】:

    • 感谢您的回答! $json 实际上是我发送的请求......但问题是:它必须是某物的位置,或者其他某物的位置,例如,在示例中:Where name=john OR id=3.
    • 我尝试了解决方案,它返回了我数据库中的所有数据,我正在寻找原因
    • 如果你有 orWhere case foreach ($data as $value){ $query->orWhere($value->field,$value->operator,$value->term); 试试第一个}
    • 在条件可能为空之前尝试 dd($data)
    • $data=json_decode($request); $哪里=[]; dd($data);,是的,它是空的......
    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2017-10-19
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多