查看与您的MariaDB服务器版本对应的手册,以便在&>> video_id = 89'&

时间:2018-03-20 04:26:10

标签: mysql laravel laravel-5 mariadb laravel-query-builder

我使用的是Laravel 5.5,我无法使用以下查询删除通知。它给出了以下错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064您有   SQL语法错误;查看与您的手册相对应的手册   MariaDB服务器版本,用于在#"> video_id = 89''> video_id = 89'附近使用正确的语法   在第1行(SQL:从notifications删除,其中data-> video_id = 89)。

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

2 个答案:

答案 0 :(得分:0)

为什么使用数据> video_id

试试

WhereRaw("video_id=$video_id")

答案 1 :(得分:0)

->运算符是MySQL中JSON_EXTRACT()函数的简写。不幸的是,MariaDB不支持这种简写语法。

MariaDB确实在10.2.3中引入了JSON_ *函数,但我不知道它们是否可以在查询中的列上工作。你能做的最好的事情就是尝试。您需要重写查询以明确使用JSON_EXTRACT()函数:

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

如果这不起作用,那么您需要从MariaDB切换到MySQL,或者您需要将查询重写为简单的字符串搜索(使用LIKE运算符)。