@aleshka-ne-programmist

Как в Laravel правильно выполнить запрос с json-полем?

есть значение колонки rates в формате:
[{"rate": "1", "price": "500"}, {"rate": "2", "price": "1000"}, {"rate": "3", "price": "1500"}]


как получить строки, в которых есть price > 1000 например?
  • Вопрос задан
  • 209 просмотров
Пригласить эксперта
Ответы на вопрос 4
@maksim_fix
Junior PHP developer
делайте json_decode(), теперь у вас есть php-массив.
Далее перебирайте этот самый массив с помощью foreach, ну и тут проверяете и делайте что вам нужно
Ответ написан
New_Horizons
@New_Horizons
Бред:
Тут дело даже не в laravel. Вы на уровне бд не сможете нормально фильтровать так.
Насколько я знаю в последних версиях mysql (ну ладно, не так уж прям в последних, с 5.7) появилась поддержка json и даже фильтрация по элементам json. Но работает это жутко медленно. (это не точно)
Если есть возможность, меняйте структуру бд - не хранить в json, использовать для этого отдельную таблицу и отношение один-ко-многим.
Если нет, то придётся делать как предложил Максим Фикс.
Ну ещё варик, если бд свежая, то вот так попробовать можно: JSON Where Clauses
Ответ написан
@PerfilovStanislav
select
    rates->'$'
from my_table where
    rates->'$[0].price' > 1000 or
    rates->'$[1].price' > 1000 or
    rates->'$[2].price' > 1000
Ответ написан
seoperin
@seoperin
Full stack web developer. Laravel / Vue
Попробуй
...->whereJsonContains('rates->price', '>', '1000')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы