Как получить данные из уведомлений? [Ошибка при получении данных] laravel 5.8

Когда когда-либо пользователь публикует сообщения в потоке, он отправляет уведомления, а затем формирует панель навигации, есть раскрывающееся меню, в котором пользователь может видеть все свои уведомления, но когда я пытаюсь открыть его, он выдает ошибку

Неопределенный индекс: поток (вид: C: \ Users \ Merlijn \ AppData \ Roaming \ Composer \ Laravel Projects \ Forum \ resources \ views \ layouts \ partials \ notification \ replied_to_thread.blade.php) (View: C: \ Users \ Merlijn \ AppData \ Roaming \ Composer \ Laravel Projects \ Forum \ resources \ views \ layouts \ partials \ notification \ replied_to_thread.blade.php) (Просмотр: C: \ Users \ Merlijn \ AppData \ Roaming \ Composer \ Laravel Projects \ Forum \ resources \ views \ layouts \ partials \ notification \ replied_to_thread.blade.php) (Просмотр: C: \ Users \ Merlijn \ AppData \ Roaming \ Composer \ Laravel Projects \ Forum \ resources \ views \ layouts \ partials \ notification \ replied_to_thread.blade. php)

а если я сделаю dd($notification), я получу эти данные

#attributes: array:8 [▼
"id" => "c055bf7e-8aa0-41d6-b188-d73073dbfefb"
"type" => "App\Notifications\RepliedToThread"
"notifiable_type" => "App\User"
"notifiable_id" => 1
"data" => "{"thread":{"id":2,"subject":"22JSUpdated Updated Updated","thread":"eaweaewarea kejwabnejk.wabe;beh;lkwabhel.kwajewaeaweawe","type":"Question Updated","created_ ▶"
"read_at" => null
"created_at" => "2019-03-19 13:28:11"
"updated_at" => "2019-03-19 13:28:11"
]
#original: array:8 [▼
"id" => "c055bf7e-8aa0-41d6-b188-d73073dbfefb"
"type" => "App\Notifications\RepliedToThread"
"notifiable_type" => "App\User"
"notifiable_id" => 1
"data" => "{"thread":{"id":2,"subject":"22JSUpdated Updated Updated","thread":"eaweaewarea kejwabnejk.wabe;beh;lkwabhel.kwajewaeaweawe","type":"Question Updated","created_ ▶"
"read_at" => null
"created_at" => "2019-03-19 13:28:11"
"updated_at" => "2019-03-19 13:28:11"
]

и на панели навигации я пытаюсь получить доступ к таким данным уведомления

@foreach(auth()->user()->unreadNotifications as $notification)
<a href="{{route('thread.show',$notification->data['thread']['id'])}}">

    {{$notification->data['user']['name']}} commented on <strong> 
{{$notification->data['thread']['subject']}}</strong>
</a>
@endforeach

но он говорит, что ['thread']['id'] undefined, а в dd я вижу, что в массиве: 8

"data" => "{"thread":{"id":2,"subject":"22JSUpdated Updated Updated","thread":"eaweaewarea kejwabnejk.wabe;beh;lkwabhel.kwajewaeaweawe","type":"Question Updated","created_at":"2019-03-19 10:56:58","updated_at":"2019-03-19 10:56:58","user_id":1,"solution":null},"user":{"id":1,"name":"johndoe","email":"[email protected]","email_verified_at":null,"created_at":"2019-03-14 15:34:15","updated_at":"2019-03-14 15:34:15"}} 

но почему я не могу найти идентификатор потока, вместо этого он говорит, что он не определен


person HashtagForgotName    schedule 19.03.2019    source источник


Ответы (1)


data - это строка, содержащая формат json. Если вы не сообщите PHP эту информацию, PHP просто интерпретирует ее как строку, не имеющую ключей.

Итак, вам нужно будет проанализировать json перед использованием ключей:

$data = json_decode($notification->data);
echo $data->thread->id;

Обновление: я полагаю, вы получаете эти значения с помощью Eloquent? Если это так, вы можете позволить eloquent проанализировать эти строки json за вас < / а>.

Просто определите свойство $casts в своей модели и добавьте свойство.

protected $casts = [
    'data' => 'array',
];

Теперь вы можете использовать свойство напрямую: $notification->data['thread']['id']

person Jerodev    schedule 19.03.2019
comment
можно ли это сделать и в представлении? в любом случае - person HashtagForgotName; 19.03.2019
comment
protected $casts = [ 'data' => 'array', ]; после добавления этого к App\Notifications\RepliedToThread.php он по-прежнему говорит, что он не определен как в потоке, так и в пользователе. note Примечание Карты уведомлений были сделаны с php artisan make:notification RepliedToThread , поэтому его нет model - person HashtagForgotName; 19.03.2019
comment
Вы должны добавить в модель свойство $cast, а не уведомление. - person Jerodev; 19.03.2019