当买家用户向卖家发送问题时,我已经点击this链接在我的laravel电子商务应用中创建数据库通知
我的应用程序成功能够如下创建数据库通知
表:通知
id | type | notifiable_id | notifiable_type | data | read_at | created_at | updated_at
id = 0b2a7fdf-eea4-4982-a86d-e874bb4f28ef
type = App\Notifications\BuyerQuestionNotification
notifiable_id= 48
data = {"message":"Someone asked question for Hostelfe","url":"#", "question_id":12024}
read_at = NULL
created_at = 2018-04-07 12:46:42
updated_at = 2018-04-07 12:46:42
现在我想通过data-> question_id删除数据库通知行
I have tried below query :
DB::table('notifications')
->where('type','App\Notifications\SellerAnswerNotification')
->where('data->question_id',2079107489)
->first();
出现错误:
[2019-03-31 13:22:03]本地。错误:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以在'>'$。“ question_id”'=?'附近使用正确的语法。在第1行(SQL:从
notifications
中选择*,其中type
= App \ Notifications \ SellerAnswerNotification和data
->'$。“ question_id”'= 2079107489)
我也尝试过以下查询:
$result=DB::table('notifications')->whereRaw("JSON_EXTRACT(data, '$.question_id') = ?", [2079107489]);
但出现类似错误
如何更正查询以在通知表中获取行并通过json删除行?
答案 0 :(得分:0)
当您执行json_decode($ data)时,然后尝试where($ data ['question_id'])
答案 1 :(得分:0)
在这里,我尝试了这个,它奏效了:
DB::table('notifications')
->where('type','App\Notifications\BuyerQuestionNotification')
->where('data->question_id',12024)
->first();
注意:它仅适用于MySQL 5.7.13和更高版本。 进一步阅读: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#operator_json-inline-path https://laravel.com/docs/5.8/queries#json-where-clauses