Laravel: Как удалить уведомление базы данных в соответствии с данными, присутствующими в массиве уведомлений

#laravel #notifications

#laravel #уведомления

Вопрос:

Я перешел по этой ссылке, чтобы создать уведомление базы данных в моем приложении электронной коммерции laravel, когда пользователь-покупатель отправляет вопрос продавцу

мое приложение успешно смогло создать уведомление базы данных следующим образом

таблица: уведомления

 id | type | notifiable_id | notifiable_type | data | read_at | created_at | updated_at
  
 id = 0b2a7fdf-eea4-4982-a86d-e874bb4f28ef

type = AppNotificationsBuyerQuestionNotification

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','AppNotificationsSellerAnswerNotification')
    ->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 в таблице уведомлений?

Комментарии:

1. Какое-либо решение вы нашли? @Bishank Badgami

Ответ №1:

Ну вот, я попробовал это, и это сработало:

 DB::table('notifications')
->where('type','AppNotificationsBuyerQuestionNotification')
->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

Ответ №2:

Когда вы выполняете json_decode ($ data), затем попробуйте where($data[‘question_id’])