Правильный способ выбрать непустые значения в столбце json с Laravel> 5.6? - PullRequest
0 голосов
/ 16 сентября 2018

Кажется, я не могу обернуться вокруг этого.

Я получил несколько переводов в столбце json с именем text, и я хочу выбрать только те записи, которые не имеют пустых переводов для определенного языка (не установлен или не null).

Я изо всех сил пытаюсь создать запрос, который не возвращает запись, если установлено значение null. Вот некоторые text значения столбца json, и мне нужен запрос, который возвращает только первую запись в этом примере, где у меня есть перевод для значения fr:

text: "{"de": "danke", "fr": "merci"}"
text: "{"de": "hallo", "fr": null}"
text: "{"de": "und"}"

Вот что я попробовал:

parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") is not null' )->get();

-> возвращает

text: "{"de": "danke", "fr": "merci"}"
text: "{"de": "hallo", "fr": null}"

Облом. Он пропускает запись, где fr вообще не установлен (это нормально), но продолжает выбирать запись, где fr имеет значение null. Итак, мне нужно настроить запрос, чтобы исключить запись с "fr": null

Давайте подойдем к этому шаг за шагом. Когда я пытаюсь найти положительное совпадение, ищите строку, подобную этой:

parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") = "merci"' )->get();

-> возвращает

text: "{"de": "danke", "fr": "merci"}"

Это правильно. Теперь, казалось бы, легко найти способ изменить это и исключить записи с "fr": null. Но не повезло.

parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") <> "merci"' )->get();

-> возвращает только запись, в которой установлена ​​fr, но не равна merci. Он пропускает запись, где fr не установлено.

text: "{"de": "hallo", "fr": null}"

Попробуем исключить записи, в которых для fr установлено значение null. Но тоже не повезло:

parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") <> "null"' )->get();

-> возвращает

text: "{"de": "danke", "fr": "merci"}"
text: "{"de": "hallo", "fr": null}"

Или,

parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") <> null' )->get();

-> возвращает пустой результат.

Как, черт возьми, я могу исключить fr значения, которые не установлены или установлены на null?

1 Ответ

0 голосов
/ 16 сентября 2018

Я нашел решение в похожем потоке Stackoverflow .Это не очень очевидная проблема, я бы сказал, для кого-то со знанием начинающих.

Кажется, что значение null в столбце json не соответствует значению null в моих предыдущих попытках запроса.Это должно быть настроено следующим образом, и тогда это работает.По сути, сначала необходимо изменить нулевое значение на тот же тип значения null со следующим кодом:

CAST("null" AS JSON)

, а затем вписать его в запрос:

parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") <> CAST("null" AS JSON)' )->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...