Сегодня днем я рвал на себе волосы, пытаясь заставить работать цепочку заданий. Что бы ни случилось, я не могу запустить связанную работу. Первый всегда работает и успешен, но цепочка никогда не будет работать.
Например, у меня есть прослушиватель событий, например
class PersistPreviousStatement implements ShouldQueue
{
/**
* @param StatementCreated $event
*/
public function handle(StatementCreated $event): void
{
DoOneThing::withChain([
new DoSomething()
])->dispatch();
}
}
Мои два класса работы ниже:
class DoOneThing
{
use Dispatchable, Queueable;
public function handle(): void
{
$statement = Statement::find(20);
$statement->file = 'yyy';
$statement->save();
}
}
class DoSomething
{
use Dispatchable, Queueable;
public function handle(): void
{
$statement = Statement::find(10);
$statement->file = 'xxxx';
$statement->save();
}
}
В ситуации выше. Мой класс DoOneThing правильно устанавливает запись с «yyy», однако класс DoSomething не запускается. Если я изменю порядок, как
DoSomething::withChain([
new DoOneThing()
])->dispatch();
DoSomething запускается, а не DoOnething. У меня оба задания настроены на очередь/отправку, а мой драйвер настроен на синхронизацию. Я также могу отправлять задания друг за другом независимо, например:
DoSomething::dispatch() DoOneThing::dispatch()
и оба побегут.
Есть идеи?






Мне не хватало черты InteractsWithQueue в моих работах.
У меня такая же проблема с вашим исходным сообщением, но все еще не работает после добавления InteractsWithQueue
Моя ошибка. Я реализую ShouldQueue для вложенных заданий. После снятия цепи работают.
Вам не нужно возвращать true из метода handle, чтобы он классифицировался как завершенный?