Laravel updateExistingPivot具有多个主键

Problem

I want to update a row in a pivot table that have 2 primary keys. But updateExistingPivot want only a single primary key.

$user = App\User::find(1);
$user->roles()->updateExistingPivot($roleId, $attributes);

My DB-tables

  • Campaign
  • User
  • Campaign_user (primary keys are user_id and campaign_id)

My Question

Should I change my pivot table so it only have 1 primary key called id. Or can I keep it with 2 primary keys, and still update it, with Eloquent?

I think for best practice you should add a key id in your Campaign_user table, structure should:

Campaign_user
 id|user_id|campaign_id

In User Model

public function campaign()
{
    return $this->belongsToMany('Campaign', 'Campaign_user','user_id','campaign_id')->withPivot('extra attribute if any');
}

In Campaign Model

public function users()
{
    return $this->belongsToMany('User', 'Campaign_user','campaign_id','user_id')->withPivot('extra attribute if any');
}

Now your code is:

$user = App\User::find($userId);
$user->campaign()->updateExistingPivot($campaignId, array('any attribute'=>$value));