2017-01-30 3 views
5

Я храню destinations поле как json типа в mysqlJSON Поиск в Laravel красноречивым

пример значение столбца ["Goa", "Moonar", "Kochi"]

Я хотел бы получить все строки, который соответствует goa в качестве пункта назначения

Однако эта строка запроса возвращает желаемый результат

SELECT * FROM `packages` 
WHERE JSON_CONTAINS(destinations, '["Goa"]'); 

Но что является красноречивым эквивалентом вышеуказанного запроса?

Laravel версия 5.3

ModelName: Search

+0

[внутреннее предложение] (https://github.com/laravel/internals/issues/296). – sepehr

ответ

5

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

use DB; (верхней части определения файла)

DB::table('packages')->whereRaw('json_contains(destinations, \'["Goa"]\')')->get();

И если у вас есть модель:

Package::whereRaw('json_contains(destinations, \'["' . $keyword . '"]\')')->get();

Предполагая, что ваш запрос выше работает в SQL.

+0

Как заменить 'Goa' такой переменной, как это' $ keyword = 'goa'' –

+0

Просто используйте конкатенацию строк. Предположим? – Jonathan

+0

Получил ошибку в синтаксисе sql 'Синтаксическая ошибка или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 1 (SQL: выберите * из 'finde_packages', где json_contains (destination, '[" Goa "]')' –

Смежные вопросы