Проблема массового назначения с помощью updateOrCreate в Laravel, почему? - PullRequest
0 голосов
/ 01 декабря 2018

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

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 = ['*'];
}

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

Почему?

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

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

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

0 голосов
/ 01 декабря 2018

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

не поддерживает '*'.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...