Проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с '>video_id=89'

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

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с '>video_id=89' в строке 1 (SQL: удалить из notifications где data->video_id=89).

DB::table('notifications')->WhereRaw("data->video_id=$video_id")->delete();

2 ответа

Почему вы используете data->video_id

Просто попробуйте с

WhereRaw("video_id=$video_id")

-> оператор является сокращением для JSON_EXTRACT() функция в MySQL. К сожалению, MariaDB не поддерживает этот сокращенный синтаксис.

MariaDB представила функции JSON_* в 10.2.3, но я не знаю, будут ли они работать со столбцами в запросе. Лучшее, что вы можете сделать, это попробовать. Вам нужно будет переписать ваш запрос, чтобы явно использовать JSON_EXTRACT() функция:

DB::table('notifications')
    ->whereRaw('JSON_EXTRACT(data, "$.video_id") = ?', [$video_id])
    ->delete();

Если это не сработает, вам нужно будет либо переключиться с MariaDB на MySQL, либо вам нужно переписать ваш запрос как простой поиск строки (используя LIKE оператор).

Другие вопросы по тегам