Laravel attache le pivot à la table avec plusieurs valeurs
Arrière-plan
Je suis de la création d'une base de données autour d'allergies alimentaires et j'ai un de nombreux de nombreux de la relation entre les aliments et les allergies. Il y a aussi un pivot valeur appelée severity
qui a une valeur numérique représentant la sévérité de l'allergie pour cet aliment.
Ce lien, le tableau ressemble à ceci;
food_id|allergy_id|severity
------- | ---------- | --------
1 | 1 | 3
1 | 4 | 1
2 | 2 | 1
Le problème
Lors de la tentative de mise à jour de la table de lien avec Éloquent (où $allergy_ids
est un tableau)
$food->allergies()->attach($allergy_ids);
Comment pourrais-je aller sur l'ajout de plusieurs valeurs de ce tableau croisé dynamique à la fois avec le pivot valeurs?
Je peux ajouter tous les allergy_id
's pour un aliment particulier d'un seul coup à l'aide de la ligne ci-dessus, mais comment puis-je également ajouter dans la severity
colonne en même temps, avec un tableau des différentes valeurs de gravité? Peut-être quelque chose comme
$food->allergies()->attach($allergy_ids, $severity_ids);
Edit: Il pourrait y avoir entre 0-20 allergies pour un aliment particulier, et un taux de sévérité de 0 à 4 pour chaque allergie, si cela aide à tous.
source d'informationauteur Duncan Ogle
Vous devez vous connecter pour publier un commentaire.
Vous le pouvez.
À partir de cet exemple dans les Docs (4.25.0):
Codé en dur version pour les deux premières lignes:
De façon dynamique, avec vos tableaux $allergy_ids $et de la gravité de compatibilité de l'état (de la taille et de tri), vous devez préparer votre synchroniser les données avant. Quelque chose comme:
Vous ne pouvez pas le faire comme vous " comme je vous suggère donc d'une simple boucle:
solution de contournement
Toutefois, si vous voulait attacher allergies multiples avec un seul niveau de gravité/id alors que vous pourriez faire ceci:
Plus simple est en effet de fixer avec les données supplémentaires, comme suit:
modifier les valeurs pour l'allergie alimentaire de la gravité, mais vous obtenez l'indice... 🙂