我有下一个Notification类:
class WelcomeNotification extends Notification
{
use Queueable;
public function __construct()
{
//
}
public function via($notifiable)
{
return ['database'];
}
public function toDatabase($notifiable)
{
return [
//
];
}
}
我想为此添加一些功能。例如:
public function myFunction()
{
return 'something';
}
但是$ user-> notifications-> first() - > myFunction什么都不返回
答案 0 :(得分:2)
当你调用notifications()
关系时,结果是使用DatabaseNotification
模型的多态关系。正确的方法是继承DatabaseNotification
并编写自定义函数。
例如,创建 app / DatabaseNotification / WelcomeNotification.php 并继承DatabaseNotification
模型。
namespace App\DatabaseNotification;
use Illuminate\Notifications\DatabaseNotification;
class WelcomeNotification extends DatabaseNotification
{
public function foo() {
return 'bar';
}
}
并覆盖使用notifications()
特征的Notifiable
函数:
use App\DatabaseNotification\WelcomeNotification;
class User extends Authenticatable
{
use Notifiable;
...
public function notifications()
{
return $this->morphMany(WelcomeNotification::class, 'notifiable')
->orderBy('created_at', 'desc');
}
...
}
现在您可以按如下方式调用自定义函数:
$user->notifications->first()->foo();