laravel: отправлять уведомление с (данными) при обновлении записи - PullRequest
0 голосов
/ 30 апреля 2019

Проблема: как я могу отобразить данные с помощью функции обновления?

уведомление отправлено, но без данных, которые я указал в этой функции: public function toDatabase ($ notifiable) {return ['data' => $this-> booking-> num_ch];
}

работает с функцией магазина, но не работает с функцией обновления

мой класс уведомлений:

<?php

namespace App\Notifications;


use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use App\Booking;

class NewMessage extends Notification
{
    use Queueable;
    public $booking;

    public function __construct(Booking $booking)
    {
        //
        $this->booking = $booking;

    }


    public function via($notifiable)
    {
        return ['database'];
    }


    public function toDatabase($notifiable)
    {
        return [
            'data'=>$this->booking->num_ch
           ];                  
    }



моя функция обновления:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Booking;
use App\User;
use Notification;
use App\Notifications\NewMessage;

class DispoController extends Controller
{


    public function update(Request $request,$id,Booking $booking)
    {
        //  
         Booking::findOrFail($id)->update([
         'num_ch'=>$request->num_ch,
         'type'=>$request->type,
         'statut'=>$request->statut,
         'enfants'=>$request->enfants,
         'adultes'=>$request->adultes,


        ]);

        auth()->user()->notify(new NewMessage($booking)); // notification


      return redirect()->route('booking.index')->with(['success'=>'succés']);

    }


показывает только «новое бронирование»

 @foreach(Auth::user()->unreadNotifications as $not)
         <li>
          <a class="dropdown-item"  >new booking {{$not->data['data']}}</a>
         </li>
 @endforeach

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019
    public function update(Request $request,$id,Booking $booking)
    {
        //  
        Booking::findOrFail($id)->update([
            'num_ch'=>$request->num_ch,
            'type'=>$request->type,
            'statut'=>$request->statut,
            'enfants'=>$request->enfants,
            'adultes'=>$request->adultes,

        ]);
        auth()->user()->notify(new NewMessage(Booking::findOrFail($id)));

         // notification


        return redirect()->route('info_client.index')->with(['success'=>'succés']);
    }
0 голосов
/ 30 апреля 2019

Проблема заключается в том, что вы не захватываете сохраненное бронирование, должно быть примерно так:

public function update(Request $request,$id,Booking $booking)
{
    //  
     $booking = Booking::findOrFail($id)->update([
         'num_ch'=>$request->num_ch,
         'type'=>$request->type,
         'statut'=>$request->statut,
         'enfants'=>$request->enfants,
         'adultes'=>$request->adultes,
    ]);

    auth()->user()->notify(new NewMessage($booking)); // notification


  return redirect()->route('booking.index')->with(['success'=>'succés']);

}

Таким образом, вы передаете пустое бронирование из вызова функции и передаете его в уведомление, а не в обновленную запись.

Но вы можете упростить все это, выполнив это

public function update(Request $request, Booking $booking)
{
    //  
     $booking->update([
         'num_ch'=>$request->num_ch,
         'type'=>$request->type,
         'statut'=>$request->statut,
         'enfants'=>$request->enfants,
         'adultes'=>$request->adultes,
    ]);

    auth()->user()->notify(new NewMessage($booking)); // notification


    return redirect()->route('booking.index')->with(['success'=>'succés']);
}

Так что вместо того, чтобы передавать оба идентификатора и бронирование, просто передайте бронирование, которое должно быть автоматически найдено из маршрута и контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...