Как искать в поле JSON, которое содержит массив объектов с Eloquent - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь выполнить поиск в поле JSON с помощью Eloquent, но теперь работаю, выполните поиск с 0 результатами.

Это для сервера Ubuntu, использующего PostgresSQL, Laravel 5.8 и Apache 2.

[{
    "value": "1",
    "label": "numero"
},{
    "value": "2016",
    "label": "anio"
},{
    "value": "Acer",
    "label": "especie"
},{
    "value": "2",
    "label": "cant_plantar"
}]
PlanificacionInfo::select('datos_complementarios')->WhereJsonContains('datos_complementarios', ["value" => "Escamonda 2019"]);

Запрос возвращает пустой

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

PostgreSQL требует, чтобы значение объекта находилось внутри массива:

PlanificacionInfo::select('datos_complementarios')
    ->whereJsonContains('datos_complementarios', [["value" => "Escamonda 2019"]]);

Используйте необработанное выражение для поиска без учета регистра:

PlanificacionInfo::select('datos_complementarios')
    ->whereJsonContains(
        DB::raw('lower("datos_complementarios"::text)'),
        [["value" => strtolower("Escamonda 2019")]]
    );
0 голосов
/ 17 мая 2019

Пробовали ли вы его в нижнем регистре 'w' в ->whereJsonContains? Вот так:

PlanificacionInfo::select('datos_complementarios')
    ->whereJsonContains('datos_complementarios', ["value" => "Escamonda 2019"]);

Из документации может потребоваться сделать что-то вроде этого:

$users = PlanificacionInfo::select('datos_complementarios')
        ->whereJsonContains('datos_complementarios->value', 'YOUR SEARCH TERM HERE')
        ->get();

Кроме того, в вашем образце, который вы задали в вопросе, не найдется подходящего json для вашего запроса - в ваших данных отображается "Escamonda 2019"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...