Igor Ostapiuk
Igor Ostapiuk

Reputation: 619

Add function to laravel Notification

I have next Notification class:

class WelcomeNotification extends Notification
{
    use Queueable;

    public function __construct()
    {
        //
    }

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

    public function toDatabase($notifiable)
    {
        return [
            //
        ];
    }
}

And I want add some function to this. For example:

public function myFunction()
{
    return 'something';
}

But $user->notifications->first()->myFunction return nothing

Upvotes: 1

Views: 881

Answers (1)

Ben
Ben

Reputation: 5129

When you call the notifications() relation it turns out is a polymorphic relation using the DatabaseNotification model. The proper way is to inherit DatabaseNotification and write the custom function their.

For example, create app/DatabaseNotification/WelcomeNotification.php and inherit DatabaseNotification model.

namespace App\DatabaseNotification;

use Illuminate\Notifications\DatabaseNotification;

class WelcomeNotification extends DatabaseNotification
{

    public function foo() {
        return 'bar';
    }

}

And override the notifications() function that uses the Notifiable trait:

use App\DatabaseNotification\WelcomeNotification;

class User extends Authenticatable
{
    use Notifiable;

    ...

    public function notifications()
    {
        return $this->morphMany(WelcomeNotification::class, 'notifiable')
                            ->orderBy('created_at', 'desc');
    }

    ...

}

And now you can call the custom function as follows:

$user->notifications->first()->foo();

Upvotes: 2

Related Questions