Laravel 中 `updateOrCreate` 的批量分配问题,为什么?

Mass Assignment issue with `updateOrCreate` in Laravel, why?

我有一个非常简单的模型:

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

我没有收到任何错误,但我的条目为空。

为什么?

一旦您在 $fillable 中设置了至少 1 个项目,Eloquent 将停止抛出批量分配异常。但是,它会忽略 $fillable 中未包含的任何为批量分配提供的字段。所以它实际上忽略了一切,因为 '*' 不被 $fillable 中的 Eloquent 支持。

首先从字段中排除id

其次,如果您想允许所有字段,请改用 protected $guarded = [];