2016-09-30 1 views
0

ProblèmeLaravel updateExistingPivot avec plusieurs clés primaires

Je veux mettre à jour une ligne dans un tableau croisé dynamique qui ont 2 clés primaires. Mais updateExistingPivot ne souhaite qu'une seule clé primaire.

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

Ma DB-tables

  • Campagne
  • utilisateur
  • Campaign_user (clés primaires sont user_id et campaign_id)

Ma question

Dois-je changer mon tableau croisé dynamique de sorte qu'il n'ait qu'une seule clé primaire appelée id. Ou puis-je le conserver avec 2 clés primaires et le mettre à jour avec Eloquent?

Répondre

0

Je pense que la meilleure pratique, vous devez ajouter un identifiant clé dans votre table Campaign_user, la structure devrait:

Campaign_user 
id|user_id|campaign_id 

Dans le modèle utilisateur

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

Dans la campagne Modèle

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

Votre code est maintenant:

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