ErrorException: косвенное изменение перегруженного элемента в Laravel Job - PullRequest
0 голосов
/ 31 января 2020

В задании, которое я обрабатываю, я извлекаю модель Eloquent в переменную. Я добавляю несколько ключей «несуществующих» (они не существуют в виде столбцов в базе данных), потому что я использую значения этих ключей во время обработки задания.

Это на самом деле прекрасно работает в задании сам по себе, но не в Черте, которую использует Работа. Ниже приведен пример того, что работает, а что нет.

Я получаю ошибку: ErrorException: Indirect modification of overloaded element of App\Models\ExampleModel has no effect in ExampleTrait.php:3

В файле: App\Jobs\ExampleJob

Use App\Models\ExampleModel;
Use App\Http\Traits\ExampleTrait;

Class ExampleJob implements ExampleTrait
{
    use ExampleTrait;

    $row = ExampleModel::findOrFail(1);

    $row['non_existing_key'] = 'test'; // This works fine

    $row = $this->functionInTrait($row);
}

Затем в ExampleTrait

trait ExampleTrait {
    public function functionInTrait($row)
    {
        $row['another_non_existing_key'] = 'test_value'; // This throws the error
        return $row;
    }
}

В ExampleModel

class ExampleModel extends Model
{   
    protected $guarded = ['id']; // So that all fields are fillable
}

Обновление

Ошибка при написании вопроса. Выполнение этого в Черте фактически работает:

$row['another_non_existing_key'] = 'test_value';

Но это не так:

$row['non_existing_key1']['another_non_existing_key'] = 'test_value';

...