Проблема массового назначения с помощью updateOrCreate в Laravel, почему?

У меня очень простая модель:

class Employee extends \Eloquent
{
}

И я хотел бы синхронизировать локальные данные с данными, хранящимися на удаленном сервере. В моем MySQL у меня есть

PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`)

Так что я уверен, что если я совпаду на idЯ бы никогда не сделал массовое задание.

Итак, когда я делаю:

foreach((new RemoteEmployee())->all() as $emp) {
Employee::updateOrCreate(['id' => $emp['id']], [
'firstname' => $emp['id'],
'lastname' => $emp['lastname'],
'phone' => $emp['phone']
]);
}

Я не должен получить эту ошибку:

Add [id] to fillable property to allow mass assignment on [App\Models\Employee].

В любом случае, если я изменю свою модель следующим образом:

class Employee extends \Eloquent
{
protected $fillable = ['*'];
}

Я не получаю никаких ошибок, но мои записи являются нулевыми.

Зачем?

0

Решение

Сначала исключите идентификатор из полей

Во-вторых, если вы хотите разрешить использование всех полей protected $guarded = []; вместо.

1

Другие решения

Как только вы установите хотя бы 1 пункт в $fillable, Eloquent перестанет выдавать исключение массового присваивания. Однако он будет игнорировать любые поля, предназначенные для массового присвоения, которые не включены в $fillable, Так что это эффективно игнорирует все, так как '*' Eloquent не поддерживается в $fillable,

0

По вопросам рекламы [email protected]