Problème Laravel : problème de mise à jour de nombreux enregistrements de relation
P粉054616867
P粉054616867 2023-08-30 21:47:17
0
1
552
<p>J'ai un modèle User qui a une relation hasMany avec un modèle Brand et j'ai du mal à mettre à jour correctement la marque de l'utilisateur. </p> <p>J'ai un formulaire qui permet aux utilisateurs de saisir/supprimer/mettre à jour leur propre marque dans un champ de texte. La méthode que j'utilise actuellement pour mettre à jour la marque d'un utilisateur après que l'utilisateur a saisi ou modifié la marque consiste à supprimer toutes les marques existantes associées. avec l'utilisateur, puis parcourez les valeurs, créez le modèle de marque, puis "saveMany"... mais il me semble avoir un conflit de contraintes lors de l'ajout... Je me demande s'il existe une meilleure façon de procéder < /p> <p>Mon modèle <code>Utilisateur</code> <pre class="brush:php;toolbar:false;">marques de fonctions publiques() { return $this->hasMany('Brands::class'); } ≪/pré> <p>Ensuite, dans mon contrôleur, j'ai le code suivant pour mettre à jour la marque ;</p> <pre class="brush:php;toolbar:false;">$user->brands()->delete(); foreach ($request['brands'] as $brand) { $brandArray[] = nouvelle marque([ 'nom' => $marque['nom'], 'note' => $marque['note'], ]); } !empty($brandArray) && $user->brands()->saveMany($brandArray); ≪/pré> <p>Existe-t-il une meilleure solution ? </p>
P粉054616867
P粉054616867

répondre à tous(1)
P粉702946921

Divisons les choses en trois parties :

# Violation de la clé de contrainte :

Si vous avez ajouté une contrainte de clé étrangère sur une autre table et que vous devez supprimer la marque, vous devez également supprimer toutes les données associées contraintes par la clé étrangère.

#Conception

Si les données relatives à la marque ne peuvent pas être supprimées, nous pouvons peut-être envisager s'il existe un meilleur design. Peut-être pourrions-nous ajouter un hook sur le frontend qui appelle l'API DELETE chaque fois que l'utilisateur supprime des données.

# Requête

Si la marque possède des clés uniques, vous pouvez utiliser upsert au lieu de saveMany. Ce sera plus efficace.

#conclusion

Je recommande de supprimer la marque via un hook sur le frontend chaque fois que l'utilisateur la supprime, et d'utiliser upsert 来处理创建和更新 pour gérer la création et la mise à jour du contenu

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal