Laravel Update或Create与复合键

时间:2019-04-08 07:33:53

标签: laravel eloquent

我有一个这样定义的表:

 Schema::create('tableA', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->integer('label_id')->unsigned();
            $table->date('date');
            $table->integer('value');
            $table->unique(['user_id','label_id','date']);
            $table->timestamps();
        });

该表使用user_id,label_id和date的组合键。

我想使用Model :: updateOrCreate方法更新表:

 Model::updateOrCreate(
                [
                    'user_id' => $user_id,
                    'label_id' => $label_id,
                    'date' => $date,
                    'value' => $value,
                ]);

但是当我已经使用复合键的行已经存在时,如果我运行该方法,则会出错,因为Laravel似乎无法使用复合键。

例如行

[
user_id:2,
label_id:3,
date:'2019-04-04',
value: 44
]

无法使用

更新
Model::updateOrCreate([
    user_id:2,
    label_id:3,
    date:'2019-04-04',
    value: 100
]);

这是否意味着无法使用updateOrCreate,我需要在尝试添加每一行之前检查每一行是否存在?

1 个答案:

答案 0 :(得分:3)

如果要基于user_id更新行,updateOrCreate的第一个参数是您要匹配的字段数组,第二个参数包含应更新的字段。因此,从您所说的来看,我相信您应该使用:

Model::updateOrCreate([
    user_id => 2,
    label_id => 3,
    date => new Carbon('2019-04-04')
],
[
    value => 100
]);