9
votes

Mettre à jour la table pivot dans le cas de beaucoup de relativement Laravel 4

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: produit , productType . La relation entre eux est beaucoup à plusieurs . Mes modèles sont xxx

tout en insérant des données sur la table pivot prd_tags, j'ai fait: xxx

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.


3 commentaires

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.


4 Réponses :


5
votes

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: xxx


0 commentaires

34
votes

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);


2 commentaires

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.



6
votes

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();


3 commentaires

Je dois faire $ pivot-> pivot-> sauvegarder (); 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



0
votes

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);


0 commentaires