laravel 4 updateExistingPivot,where子句不起作用

时间:2015-03-20 15:01:16

标签: php laravel model eloquent relationship

我有两种模式:

用户和 的资源

关系表是 resource_user

resource_user中的字段是:

  

id | resource_id | user_id | another_id

我在用户中有这种关系:

public function resources() {
        return $this->belongsToMany('Resource')->withPivot(array(
            'value',
            'another_id',
        ));
    }

现在我要更新我的数据透视表:

(在模型用户中有这个代码示例)

$this->resources()->whereAnotherId(1)->updateExistingPivot($resource_id, array(
                            'value' => $value,
                            'updated_at' => new DateTime,
                        ));

问题是another_id。

如果我的关系表中有两个条目(resource_user) 但是不同 another_id&#39。在此示例中,laravel将更新BOTH条目。但这不是我想要的。 在此示例中,只应更新一个条目(具有another_id = 1的条目)。 这是一个错误,或者我如何更新我的数据透视表(sync()函数不能在这里使用我的表设置)..

1 个答案:

答案 0 :(得分:6)

请尝试使用wherePivot()。使用whereAnotherId(1),您定位的是Resource的表,而不是数据透视表......

$this->resources()->wherePivot('another_id', 1)
                  ->updateExistingPivot($resource_id, array(
                        'value' => $value,
                        'updated_at' => new DateTime,
                    ));