如何查询 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];
我已经在 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];