J'ai commencé à travailler avec Laravel4 récemment. Je suis confronté à un problème lors de la mise à jour des données de table de pivot, dans le cas de nombreuses relation.
La situation est la suivante:
J'ai deux table: tout en insérant des données sur la table pivot prd_tags, j'ai fait: p> mais je veux maintenant Mettez à jour les données dans cette table de pivotement, quelle est la meilleure façon de mettre à jour les données sur la table pivot.
Disons-nous, je veux supprimer des tags et ajouter de nouvelles balises à un produit particulier. P> p>
4 Réponses :
Je sais que c'est une vieille question, mais si vous êtes toujours intéressé par la solution, voici:
permet de dire que votre table de pivot a "FOO" et "bar" comme attributs supplémentaires, vous pouvez Faites cela pour insérer des données dans cette table: p>
Une ancienne question, mais le 13 novembre 2013, la méthode UpdateExistingPivot a été rendue publique à de nombreuses relations. Ce n'est pas encore dans la documentation officielle.
$product->tags()->updateExistingPivot($tag->tagID, array('foo' => 'value'), false);
Fantastique. Je souhaite que les documents officiels soient mis à jour pour mettre en évidence cette méthode. Cela devrait être marqué comme la bonne réponse. À votre santé!
@haakym pas une faute de frappe, à l'époque, cela n'a rien retourné. On dirait que cela retourne maintenant un int, vraisemblablement le nouvel identifiant. Je vais éditer la réponse. Merci.
Une autre méthode pour cela tout en travaillant avec Laravel 5.0+
$tag = $product->tags()->find($tag_id); $tag->pivot->foo = "some value"; $tag->pivot->save();
Je dois faire $ pivot-> pivot-> sauvegarder (); code> pour enregistrer ma table de pivotement.
C'est en fait la solution la plus facile disponible, je pense.
Si vous utilisez cette méthode, vous obtiendrez une erreur: La modification indirecte de la propriété surchargée n'a aucun effet code>
Ceci est complet exemple:
$user = $this->model->find($userId); $user->discounts() ->wherePivot('discount_id', $discountId) ->wherePivot('used_for_type', null) ->updateExistingPivot($discountId, [ 'used_for_id' => $usedForId, 'used_for_type' => $usedForType, 'used_date_time' => Carbon::now()->toDateString(), ], false);
Avez-vous lu les informations dans les documents? Aide-t-il du tout ... Four.Laravel.com/docs/ Eloquant # Travailler avec pivot-tables
@Phillsparks: Oui, j'ai traversé ce document. Il existe une méthode appelée synchronisation pour le faire, ce qui prendra une gamme d'identifiants et d'insérer et de suppression respectivement, mais que si ma table de pivot ait des attributs autres que les identifiants des deux table. La méthode de synchronisation doit prendre une matrimonie d'objets au lieu d'un éventail d'entiers.
Eloquent favorise une conception de table simple dans laquelle vos tables de pivot ont des colonnes d'identification utilisées pour référencer les lignes. Eloquant n'a pas été conçu pour répondre à d'autres conceptions de base de données, car il existe des solutions ORM plus complètes disponibles.