如何在laravel中搜索具有数组属性的对象数组

Posted

技术标签:

【中文标题】如何在laravel中搜索具有数组属性的对象数组【英文标题】:how to search a array of objects with array property in laravel 【发布时间】:2021-10-28 02:12:27 【问题描述】:

我想查询一个带有 json 列的表 json列中存储的对象是这样的:

[    
    
        "title":"first",
        "ids":[79,583,584]
    ,
    
        "title":"second",
        "ids":[600,601,602]
    ,
    
        "title":"third",
        "ids":[605,606,624]
    
]

例如,我想找到其中一个 ids 属性包含例如 79 的行。像这样:

Model::query()->whereJsonContains('data', ['ids[*]' => 79])->first();

我已经搜索了很多并尝试了一些语法,但没有任何效果。那有可能吗?如何? 我的数据库是mysql

【问题讨论】:

你可以这样做:***.com/questions/30804878/… 【参考方案1】:

目前可能无法查询嵌套的 json 格式,不过您可以尝试过滤 eloquent 集合。

您必须先将 json 数据列转换为模型上的数组,然后根据您的条件过滤集合。

$id = 8;
$filtered = Model::all()->filter(function($item, $key) use($id) 
    $count = 0;
    foreach($item->data as $data) 
        if(in_array($id, $data['ids'])) 
            $count += 1;
        
    
    return $count > 0;
)->all();

【讨论】:

以上是关于如何在laravel中搜索具有数组属性的对象数组的主要内容,如果未能解决你的问题,请参考以下文章

ColdFusion - 搜索结构数组的有效方法是啥?

在 MongoDB 中的对象数组中搜索特定属性

在所有表中搜索具有给定值或名称的字段[重复]

在所有表中搜索具有给定值或名称的字段[重复]

如何在URL中搜索具有特定类别的项目

如何在 Visual Studio Code 中搜索具有特定扩展名且包含特定文本的文件