我如何创建一个 artisan 命令来向系统中的所有用户发送数据库通知,其中包含他们在系统中使用了多长时间的信息?
我的 SendEmails 命令如下所示:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\User;
use Illuminate\Support\Facades\Mail;
use App\Mail\UserEmails;
use Illuminate\Support\Facades\Notification;
class SendEmails extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'send:emails';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Send Email to allusers';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$users = User::all();
foreach($users as $user){
$created_at = $user->created_at;
Notification::send($user, new SendEmailsNotification($created_at));
}
}
}
然后我创建了通知表,进行了迁移,代码如下:
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
class SendEmailsNotification extends Notification
{
use Queueable;
public $created_at;
public function __construct($created_at)
{
$this->created_at = $created_at;
}
public function via($notifiable)
{
return ['database'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->line('The introduction to the notification.')
->action('Notification Action', url('/'))
->line('Thank you for using our application!');
}
public function toArray($notifiable)
{
return [
];
}
}
用户.php:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
//use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
//use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'address', 'image'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
//'email_verified_at' => 'datetime',
'address' => 'array'
];
protected $uploads = '/images/';
public function getImageAttribute($image){
return $this->uploads . $image;
}
public function contacts(){
return $this->hasMany('App\Contact');
}
}
当我运行工匠命令“php artisan send:emails”时,我在控制台中看到以下错误:
BadMethodCallException : 调用未定义的方法 App\User::routeNotificationFor()
如何向所有用户发送通知?
您只需要取消注释该// use Notifiable
行。
所述Notifiable
性状包括其他两个特点,其中之一是RoutesNotifications
性状。
的RoutesNotifications
特点是,你需要能够发送通知到什么User
。
此外,您应该能够将SendEmails
命令中的代码简化为:
Notification::send(User::all(), new SendEmailsNotification());
而不是明确地传递created_at
你可以从$notifiable
你的SendEmailsNotification
(因为在这种情况下无论如何$notifiable
都是User
模型)例如
public function toArray($notifiable)
{
return [
'data' => 'Account Created' . $notifiable->created_at->diffForHumans()
];
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句