Skip to content
Advertisement

How to add model to laravel notifications and access it with eloquent?

I created a laravel notification class with

php artisan make:notification NewUserNotification

class NewUserNotification extends Notification
{
use Queueable;
protected $cost;
private  $order_id;

/**
 * Create a new notification instance.
 *
 * @return void
 */
public function __construct($cost, $order_id)
{
    $this->cost = $cost;
    $this->order_id = $order_id;
}



/**
 * Get the notification's delivery channels.
 *
 * @param  mixed  $notifiable
 * @return array
 */
public function via($notifiable)
{
    return [CustomDbChannel::class];
}

/**
 * Get the mail representation of the notification.
 *
 * @param  mixed  $notifiable
 * @return IlluminateNotificationsMessagesMailMessage
 */
public function toMail($notifiable)
{
    return (new MailMessage)
        ->line('The introduction to the notification.')
        ->action('Notification Action', url('/'))
        ->line('Thank you for using our application!');
}

/**
 * Get the array representation of the notification.
 *
 * @param  mixed  $notifiable
 * @return array
 */

public function toDatabase($notifiable)
{
    $a = $this->cost;
    return [
        'cost' => $a,
        'order_id' => $this->order_id,
    ];
}

public function toArray($notifiable)
{
    return [
        'cost' => $this->cost,
    ];
}
}

then made a custom DbChannel to add order id

class CustomDbChannel
{

public function send($notifiable, Notification $notification)
{
    $data = $notification->toDatabase($notifiable);

    return $notifiable->routeNotificationFor('database')->create([
        'id' => $notification->id,

        //customize here
        'order_id' => $data['order_id'], //<-- comes from toDatabase() Method below

        'type' => get_class($notification),
        'data' => $data,
        'read_at' => null,
    ]);
}
}

Everything is working perfectly, I am able to access Auth::user->notifications but not the order, I have the order_id as a foreign key and able to access the order in phpMyAdmin by clicking on it, I’ve tried this but its giving me null

$notifications->order

Advertisement

Answer

You could use $order = Order::find($data['order_id']) presuming you have the Order class imported into your namespace. I think that’s probably the simplest way.

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement