У меня очень простая модель:
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 = ['*'];
}
Я не получаю никаких ошибок, но мои записи являются нулевыми.
Зачем?
Сначала исключите идентификатор из полей
Во-вторых, если вы хотите разрешить использование всех полей protected $guarded = [];
вместо.
Как только вы установите хотя бы 1 пункт в $fillable
, Eloquent перестанет выдавать исключение массового присваивания. Однако он будет игнорировать любые поля, предназначенные для массового присвоения, которые не включены в $fillable
, Так что это эффективно игнорирует все, так как '*'
Eloquent не поддерживается в $fillable
,