我正在使用L5.3。
我有很多Queueable Laravel Notifications,他们与Redis合作得很好。除了与删除某些Eloquent模型相关的通知。
这是通知源示例:
<?php
namespace App\Notifications\Games;
use App\Helpers\NotificationHelper;
use App\Game;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Log;
class Deleted extends Notification implements ShouldQueue
{
use Queueable;
public $game;
private $game_id;
public function __construct($game_id)
{
$this->game_id = $game_id;
$this->game = Game::withTrashed()->with('situation')->find($game_id);
// Log::info($this->game) here shows everything is ok
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database'];
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toDatabase($notifiable)
{
return [
'game_id' => $this->game->id,
'html' => '' . view('notifications.games.deleted', ['id' => $this->id, 'game' => $this->game, 'notifiable' => $notifiable])
];
}
}
我发送的方式如下:
$user->notify(new Deleted($id));
如果我删除implements ShouldQueue
,则通知有效。但我需要队列,因为使用了几个外部服务(如电报,Facebook,One信号等),一些通知可以发送给很多用户。
storage\logs\laravel.log
和storage\logs\worker.log
文件中也没有错误。 failed_jobs
表中没有项目。
是的,我正在使用soft deleting
模型。
答案 0 :(得分:0)
好的,最后我找到了两个解决方案,发布了两个:
这不是一个真正的解决方案,对我而言似乎更像是一个肮脏的黑客,因为根据情况它可以让你写更多的代码。
// Remove $game from constructor...
public function __construct($game_id)
{
$this->game_id = $game_id;
}
// Then add it to your toDatabase, toMail, toFacebook etc methods:
public function toDatabase($notifiable)
{
$game = Game::withTrashed()->with('situation')->find($this->game_id);
return [
'game_id' => $this->game_id,
'html' => '' . view('notifications.games.deleted', ['id' => $this->id, 'game' => $game, 'notifiable' => $notifiable])
];
}
这是我决定使用的:
// ENTER
bars
.enter()
.append("rect")
.style("fill", "green")
.attr("width", x.bandwidth())
.attr("x", 0)
.attr("x", function(d) { return x(d.date); })
.attr("y", y(0))
.attr("height", 0)
.style("opacity", 0)
//.merge(bars)
.transition()
.duration(500)
.attr("y", function(d) { return y(d.total); })
.attr("height", function(d) { return height - y(d.total); })
.style("opacity", 1);
使用第二种方法,如果我们有2个通知频道,我们将从DB中检索Game模型2次,如果我们有10个频道,我们将检索10次..是的,这是开销,但我们能够使用所有Eloquent Collection助手等。这就是我选择第二种方法而不是数组的原因。我希望有一天能帮到某人。
我很高兴听到为什么我们不能在构造函数中获得Eloquent模型。