如何查询 Eloquent 中 JSON 列内的数组

How to query array inside JSON column in Eloquent

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

在“属性”列中,有:

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

我要查询“媒体”= 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']])
    ]
);

像这样访问数据

$product=$yourdata['products'][0];