Laravel: почему мои данные «уведомления» из базы данных не отображаются?

#laravel #laravel-6

#laravel #laravel-6

Вопрос:

итак, я получил этот код от контроллеров, маршрутов и внутри app.blade.view: контроллеры :

 public function showNotif(){        
  $dataNotif= Notification::get();
  // dd($dataNotif);
  return view('/',compact('dataNotif'));
}
  

Маршруты :

 Route::get('/','homeController@showNotif');
  

и внутри app.blade.view я получил эти коды внутри интерактивных значков колокольчиков, которые показывают уведомления:

 @if(isset($dataNotif))
  @foreach($dataNotif as $dn)
    <a href="#" class="dropdown-item dropdown-item-unread">                  
       <div class="dropdown-item-desc">
          <p>{{$dn->notifikasi}}</p>
       </div>
    </a>           
  @endforeach          
@else  
  <a href="#" class="dropdown-item dropdown-item-unread">                  
     <div class="dropdown-item-desc">
         <p>No Notifications!</p>
     </div>
  </a>
@endif 
  

когда я пытался просто использовать метод foreach внутри app.blade.view, но он всегда показывал «неопределенную переменную» при ошибке $ dataNotif, но когда я сначала использую isset, данные не отображаются, при открытии основного веб-сайта должно отображаться 2 уведомления…

итак, есть ли какое-либо ошибочное исключение или незначительные ошибки, которые я допустил?

спасибо за ответ..

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

1. что вы получили за dd($dataNotif); ?

Ответ №1:

Может помочь, если мы не знаем, как выглядит ваш класс уведомлений, и в последний раз я проверял, что доступ к данным в уведомлении осуществляется через $notification->data['notifikasi'] , предполагая, что ваш класс уведомлений выглядит следующим образом:

 /**
 * Get the array representation of the notification.
 *
 * @param  mixed  $notifiable
 * @return array
 */
public function toArray($notifiable)
{
    return [
        'notifikasi' => 'lorem ipsum'
    ];
}
  

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

1. о, небольшая информация, я не использую какой-либо метод «уведомления» в laravel, я просто выполняю миграцию и моделирую, чтобы иметь простое уведомление… поэтому я боюсь, что я не настолько разбираюсь в этом классе, хотя…

2. Если это так, попробуйте использовать all() вместо get() .

Ответ №2:

Если уведомление поддерживает хранение в таблице базы данных, вы должны определить toDatabase метод в классе уведомлений. Этот метод получит $notifiable объект и должен вернуть простой массив PHP. Возвращенный массив будет закодирован как JSON и сохранен в data столбце вашей notifications таблицы. Давайте рассмотрим пример toDatabase метода:

 /**
 * Get the array representation of the notification.
 *
 * @param  mixed  $notifiable
 * @return array
 */
public function toDatabase($notifiable)
{
    return [
        'invoice_id' => $this->invoice->id,
        'amount' => $this->invoice->amount,
    ];
}
  

Доступ к уведомлениям

После того, как уведомления сохранены в базе данных, вам нужен удобный способ доступа к ним из ваших уведомляемых объектов. IlluminateNotificationsNotifiable Признак, который включен в AppUser модель Laravel по умолчанию, включает в себя notifications связь Eloquent, которая возвращает уведомления для объекта. Для получения уведомлений вы можете использовать этот метод, как и любое другое отношение Eloquent. По умолчанию уведомления будут отсортированы по created_at метке времени:

 $user = AppUser::find(1);

foreach ($user->notifications as $notification) {
    echo $notification->type;
}