У меня есть база данных, работающая на mysql 5.7.11 и имеющая много данных в таблице с колонкой JSON. Я получил сырой запрос, подобный этому.Laravel mysql json data selection
select * from `note`
where `note_structure_id` = 3
and JSON_EXTRACT(LCASE(data), '$._letter') = 'a'
and JSON_EXTRACT(data, '$._number') = 1
Выполнение продолжения pro или phpmyadmin дает мне результат, которого я ожидаю;
{"_letter": "A", "_number": 1}
Тот же запрос, который я строю с помощью laravel, дает мне результат ничего. Пустой массив. Мой код для создания одного и того же запроса получил такой код.
$result = \DB::table('note')->where('note_structure_id', $structureId);
if(is_array($query)) {
if(isset($query['where'])) {
foreach($query['where'] AS $field => $value) {
if(is_numeric($value)) {
$result = $result->where(\DB::raw("JSON_EXTRACT(data, '$._{$field}')"), '=', $value);
}
else {
$result = $result->where(\DB::raw("JSON_EXTRACT(LCASE(data), '$._{$field}')"), '=', strtolower($value));
}
}
}
}
dd($result->get());
Кто-нибудь знает, что я сделал не так с моим кодом или чем-то еще. Я пробую все, что возможно для его исправления, но без результата.
Спасибо!
После изучения его приходит к выводу, что мне нужно добавить JSON_UNQUOTE() вокруг JSON_EXTRACT(), и он работает как шарм! –