在 MySQL JSON 字段中的数组中搜索值(Laravel/Lumen)[重复]

Posted

技术标签:

【中文标题】在 MySQL JSON 字段中的数组中搜索值(Laravel/Lumen)[重复]【英文标题】:Searching for value within an array in MySQL JSON fields (Laravel/Lumen) [duplicate] 【发布时间】:2018-07-25 10:51:39 【问题描述】:

我在 mysql JSON 字段的数组(图像路径)中搜索值时遇到问题。我想检查图像的路径是否存储在数据库中以防止删除文件。

我尝试过的控制器功能:

public function checkImage($filename)
    $content = Content::whereRaw('JSON_CONTAINS(images->"$.path", lAeH88gIv4HeycQXHeMbT8yOyydybbOVhsSq9eAx.jpeg')->exists();
    $content = Content::whereRaw('json_contains(images->path, \'["lAeH88gIv4HeycQXHeMbT8yOyydybbOVhsSq9eAx.jpeg"]\')')->exists();
    $content = Content::whereRaw('json_contains(images->path, \'["' . $filename . '"]\')')->exists();
    $content = Content::whereRaw('json_contains(images, \'["' . $filename . '"]\')')->exists();
    return response()->json($content);

示例 JSON:


    "id": 4,
    "images": [
        
            "path": "abc/abc123.jpg",
            "caption": "text",
            "credits": "text"
        ,
        
            "path": "abc/xyz123.jpg",
            "caption": "text",
            "credits": "text"
        ,
        
            "path": "abc/827364527.jpg",
            "caption": "text",
            "credits": "text"
        
    ],
    "created_at": "2017-12-20 11:40:16",
    "updated_at": "2018-01-04 12:46:37"

【问题讨论】:

出了什么问题?你期望会发生什么?有错误信息吗?请提供minimal reproducible example。 【参考方案1】:

我找到了解决办法。在我的控制器功能下方:

public function checkIfImageExists()
$content = Content::where('images', 'like',  '%image-name-123.jpg%')->exists();
return response()->json($content);

如果图像在数据库 JSON 字段中使用,则函数返回 true。如果不使用则为 False。

【讨论】:

以上是关于在 MySQL JSON 字段中的数组中搜索值(Laravel/Lumen)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL通过数组中的键搜索json值

sql 从MySQL中JSON编码字段中的另一个数组中的数组中获取所有值。

MySQL,根据 JSON 数组中的值选择记录

mysql数据库中某个字段存的是json数据,如何对json数据中的数据进行操作?

MySQL 过滤 JSON_CONTAINS 数组中的任何值

获取mysql中的多条记录并存入json数组中显示在HTML表格单单字段中