私のアプリケーションでは、ユーザはメッセージ(リマインダーのような)をスケジュールすることができ、時刻はアプリケーションにポップアップが表示されます。このために、私は通知を作成し、Websocketを通じてこれを送信します。Laravel - ジョブを削除する方法(通知)
ここで、間違った日付を挿入した場合(または単に思い出しの日付を変更したい場合)、これが実行される前にJOBにアクセスする必要があるとします。
私は多くの解決策を試してみました、ない作品...
私の通知クラスがある:
class RemindNote extends Notification implements ShouldQueue, ShouldBroadcast
{
use Queueable;
use InteractsWithQueue;
}
RemindNote試着ハンドル方法:アクティブにphp artisan queue:work
を持つ
public function handle($event) {
$this->delete();
}
私が通知をスケジュールするとき、handleメソッドは決して呼び出されません。
は、このメソッドが呼び出され
AppServiceProvider
にQueue::before
を試みたが、私は$event->job->delete()
を呼び出す場合、通知が常に発射される - ジョブが削除されました。しかし、例えば私が$event->job->release()
を呼び出すと、ジョブは再スケジュールされます
したがって、実行前にJOBペイロードにアクセスして削除する方法がありますか?
仕事は私がlaravel.logでこれを見て処理されたEDITこれにより
\Queue::before(function(JobProcessing $event) {
\Log::debug($event->job->isDeleted());
$event->job->delete();
});
は、:
[2017-07-27 16:44:35] stage.DEBUG:
[2017-07-27 16:44:36] stage.DEBUG:
そして、通知が常に発射されます。前のフックのdelete()は効果がないようです。
EDIT これは、ペイロードは、キューにログイン::(メソッド$ event-> job->ペイロード())の前にある:
[2017-07-27 15:00:13] stage.INFO: array (
'job' => 'Illuminate\\Queue\\[email protected]',
'data' =>
array (
'commandName' => 'Illuminate\\Notifications\\SendQueuedNotifications',
'command' => 'O:48:"Illuminate\\Notifications\\SendQueuedNotifications":6:{s:14:"' . "\0" . '*' . "\0" . 'notifiables";O:45:"Illuminate\\Contracts\\Database\\ModelIdentifier":2:{s:5:"class";s:26:"App\\Repositories\\User\\User";s:2:"id";a:1:{i:0;i:29;}}s:15:"' . "\0" . '*' . "\0" . 'notification";O:28:"App\\Notifications\\RemindNote":7:{s:4:"body";s:3:"ddf";s:4:"user";O:45:"Illuminate\\Contracts\\Database\\ModelIdentifier":2:{s:5:"class";s:26:"App\\Repositories\\User\\User";s:2:"id";i:29;}s:2:"id";s:36:"e160802c-e9e5-4d2c-a1e1-d63cbdceb54c";s:10:"connection";N;s:5:"queue";N;s:5:"delay";O:13:"Carbon\\Carbon":3:{s:4:"date";s:26:"2017-07-27 14:31:00.000000";s:13:"timezone_type";i:3;s:8:"timezone";s:11:"Europe/Rome";}s:6:"' . "\0" . '*' . "\0" . 'job";N;}s:11:"' . "\0" . '*' . "\0" . 'channels";a:1:{i:0;s:9:"broadcast";}s:10:"connection";N;s:5:"queue";N;s:5:"delay";r:14;}',
),
)
[2017-07-27 15:00:13] stage.INFO: array (
'job' => 'Illuminate\\Broadcasting\\BroadcastEvent',
'data' =>
array (
'event' => 'O:60:"Illuminate\\Notifications\\Events\\BroadcastNotificationCreated":6:{s:10:"notifiable";O:45:"Illuminate\\Contracts\\Database\\ModelIdentifier":2:{s:5:"class";s:26:"App\\Repositories\\User\\User";s:2:"id";i:29;}s:12:"notification";O:28:"App\\Notifications\\RemindNote":7:{s:4:"body";s:3:"ddf";s:4:"user";O:45:"Illuminate\\Contracts\\Database\\ModelIdentifier":2:{s:5:"class";s:26:"App\\Repositories\\User\\User";s:2:"id";i:29;}s:2:"id";s:36:"e160802c-e9e5-4d2c-a1e1-d63cbdceb54c";s:10:"connection";N;s:5:"queue";N;s:5:"delay";O:13:"Carbon\\Carbon":3:{s:4:"date";s:26:"2017-07-27 14:31:00.000000";s:13:"timezone_type";i:3;s:8:"timezone";s:11:"Europe/Rome";}s:6:"' . "\0" . '*' . "\0" . 'job";N;}s:4:"data";a:1:{s:4:"body";s:3:"ddf";}s:10:"connection";N;s:5:"queue";N;s:5:"delay";N;}',
),
)
キューから削除する必要があります。どのようにすれば*使用しているキューエンジンによって異なりますか? – ceejayoz
データベースキューを使用しています – Mistre83
データベース内のレコードを検索して削除できます。 – ceejayoz