mysql - 如何在 Eloquent 中查询 JSON 列中的数组

标签 mysql laravel eloquent mysql-json

我已经在 Eloquent 中使用 JSON 成功完成了一些查询,但我不知道如何从数组中的对象查询值,如下所示:

在“属性”列中,有:

{
    "products": [
        {
            "media": "1",
            "code": "4186GSB"
        },
        {
            "media": "2",
            "code": "4186GSE"
        }
    ]
}

我想查询 "media"= 1

到目前为止我已经尝试过:

$query->where('attributes->products->media', 1); // failed
// or
$query->where('attributes->products[*]->media', 1); // failed

我不知道如何使用原始查询,但如果这是解决方案也没关系!

最佳答案

您需要使用 whereJsonContains() 查询方法来查询 json 数组(自 Laravel 5.6.24 起可用)。您的查询如下所示:

$query->whereJsonContains('attributes', ['products' => ['media' => '1']]);

如果您使用的是早期版本并且没有此功能可用,您可以使用原始查询:

$query->whereRaw(
    'json_contains(attributes, ?)',
    [
        json_encode(['products' => ['media' => '1']])
    ]
);

关于mysql - 如何在 Eloquent 中查询 JSON 列中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64858436/

相关文章:

PHP PDOException 找不到驱动程序

php - Laravel Eloquent 多对多如何

php - 插入多对多关系 laravel 5

mysql - 插入一对一关系

mysql - H2 DB查询和Sql Server之间的兼容性问题

mysql - SQL 错误 [102] [42000] : Incorrect syntax near ')'

mysql - 我可以添加对数据透视表的外键引用吗

php - Laravel 的 YouTube 社交名流提供商的回调错误

php - Laravel Eloquent 地从 sql 中查找数组

python - Python 中的 MySQL 查询速度较慢,但​​其他地方速度较快