У меня есть таблица, которая выглядит так:
[
{
"id": 35,
"json_col": [
{
"key_one": 4,
"key_two": {
"value": 1,
"type": "static"
}
},
{
"key_one": 27,
"key_two": {
"value": 26,
"type": "dynamic"
}
}
],
"created_at": "2023-02-13T16:54:13.000000Z",
"updated_at": "2023-02-13T16:54:13.000000Z"
},
{
"id": 36,
"json_col": [
{
"key_one": 2,
"key_two": {
"value": 33,
"type": "static"
}
},
{
"key_one": 9,
"key_two": {
"value": 1,
"type": "any"
}
}
],
"created_at": "2023-02-13T16:54:56.000000Z",
"updated_at": "2023-02-13T16:54:56.000000Z"
}
]
Как получить строку 35
, в которой есть key_two
с value
= 1
и type
= static
, используя построитель запросов или необработанный запрос?
🤔 А знаете ли вы, что...
SQL используется для создания, изменения и управления данными в базах данных.
вы можете использовать whereJsonContains с многомерным массивом в зависимости от того, как вы их храните.
return Model::whereJsonContains('json_col', [ ['key_two' => [ 'value' => 1] ] ])
->whereJsonContains('json_col', [ ['key_two' => [ 'type' => 'static'] ] ])
->paginate(10); // or get()
просто дважды проверьте, что вывод sql на самом деле выглядит как ваш формат json, который должен выглядеть примерно так
WHERE json_contains(`json_col`, '[{\"key_two\":{\"value\":1}}]')
AND json_contains(`json_col`, '[{\"key_two\":{\"type\":\"static\"}}]')
РЕДАКТИРОВАТЬ
Если вам нужно искать несколько совпадений в одном объекте, это должно делать
return Model::whereJsonContains('json_col', [ ['key_two' => [ 'value' => 1, 'type' => 'static' ] ] ])
->paginate(10); // or get()