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

时间:2018-12-01 14:18:26

标签: php laravel laravel-5 eloquent mass-assignment

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

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 :(得分:1)

首先从字段中排除ID

第二,如果要允许所有字段使用protected $guarded = [];

答案 1 :(得分:0)

一旦您在$fillable中设置了至少一项,Eloquent将停止引发批量分配异常。但是,它将忽略$fillable中未提供的用于批量分配的任何字段。因此,由于'*'中Eloquent不支持$fillable,因此它实际上忽略了一切。