Laravel передача Eloquent объекта с работы на другую работу - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть структура ниже. Что я делаю, так это добавляю некоторые значения, которые мне понадобятся позже, которые являются временными, и я не хочу хранить их в базе данных. Но эти значения, похоже, удаляются из Eloquent Object, как только я передаю его другому заданию. Я думаю, что это связано с тем, что объект «не сериализован»?

Работа 1

class JobOne implements ShouldQueue
{
    protected $row;

    public function test()
    {
        $row = Model::findOrFail(5);

        $row['add_a_new_value'] = 'test';

        JobTwo::dispatch($row, 'something_else')->onQueue('queue_here');
    }
}

Работа 2

class JobTwo implements ShouldQueue
{
    protected $row;

    public function __construct($row)
    {
        $this->row = $row;
    }

    public function test()
    {
        dd($this->row); // This does not contain the 'add_a_new_value' key
        dd($this->row['add_a_new_value']); // This throws "Trying to access array offset on value of type null"
    }
}

1 Ответ

1 голос
/ 10 февраля 2020

Когда вы отправляете модель на работу, laravel отслеживает только название модели и ее идентификатор.

Чтобы избежать этого, добавьте SerializesModels;

class JobTwo implements ShouldQueue
{
    use SerializesModels;
    protected $row;

Или Вы можете отправить временную переменную в работу, просто добавьте еще один параметр в конструктор.

class JobTwo implements ShouldQueue
{
    protected $row;
    protected $addNewValue;

    public function __construct($row, $addNewValue)
    {
        $this->row = $row;
        $this->addNewValue = $addNewValue;
    }

    public function test()
    {
        dd($this->addNewValue);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...