Как установить переменную в json_contains с необработанным laravel? - PullRequest
0 голосов
/ 24 мая 2019

с помощью (1) я получаю желаемый результат из запроса laravel.Но как только я переключаю жестко запрограммированную «рыбу» на переменную типа $ str = 'fish', я получаю синтаксические ошибки.

(1) $find = animal::whereRaw('JSON_CONTAINS(animal_category, \'{"item_text": "fish"}\')')->get();

Я уже перепробовал все виды вариаций, используя 'или `или'Например, почти в любом месте:

$find = animal::whereRaw("JSON_CONTAINS(animal_category, \'{'item_text': $str}\')")->get();

или

$str = 'fish'
$str2 = "\'{'item_text': $str}\'"
$find = animal::whereRaw("JSON_CONTAINS(animal_category, $str2)")->get();

, но не имеет значения, что я пытаюсь, всегда синтаксическая ошибка или пусто, потому что запрос ищет '$str2 '.

Я тоже пытался без \ {"item_text": "fish"}. Все еще синтаксическая ошибка ...

Что я должен сделать, чтобы получить тот же результат, что и в жестко заданном примере?

Моя настройка: Laravel 5.8, mysql 5.7.14

Заранее большое спасибо. =)

Дополнительная информация Животные MySQL Column выглядят как

[{"item_id": 1, "item_text": "fish"}, {"item_id": 6, "item_text": "birds"}]

Может быть, естьтогда есть другой подход, тогда json_contains, чтобы получить данные с помощью предложения where?:)

Ответы [ 2 ]

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

Вы всегда можете использовать метод jsonContains () :

$find = animal::whereJsonContains('animal_category', ['item_text' => $fish])->get();

Чтобы ответить на ваш актуальный вопрос, чтобы получить то, что вы хотите, вы можете сделать:

whereRaw('JSON_CONTAINS(animal_category, \'{"item_text":"' . $fish . '"}\')')

или

whereRaw("JSON_CONTAINS(animal_category, '{\"item_text\":\"$fish\"}')")

Однако я настоятельно рекомендую против этого, так как он оставляет вас открытым для внедрения SQL (в зависимости от того, как вы получаете переменную $fish).

Чтобы обойти это, вы можете привязать значение следующим образом:

whereRaw('JSON_CONTAINS(animal_category, ?)', '{"item_text":"' . $fish . '"}')
0 голосов
/ 24 мая 2019

используйте

$str2 = "\'{\"item_text\": $str}\'"

вместо

$str2 = "\'{'item_text': $str}\'"

JSON не нравится одиночный символ ' для включения строк.Требуется двойной символ: ".

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