Sequelize hasMany Adhérer à l'association
Je suis en élargissant mon application et j'ai besoin de joindre deux modèles que j'avais déjà créé avec Sequelize, ils sont comme suit:
Repas
sequelize.define('meal', {
mealId: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
quantity: {
type: DataTypes.DECIMAL,
allowNull: false
},
period: {
type: DataTypes.INTEGER,
allowNull: false
}
})
Alimentaire
sequelize.define('food', {
idFood: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
nameFood: {
type: DataTypes.STRING,
allowNull: false
}
})
J'ai ajouté la relation suivante:
db.food.hasMany(db.meal, {as : 'Food', foreignKey : 'idFood'});
Cette ligne ajoute une idFood colonne de Repas
Rapidement en expliquant ce qui se passe, Alimentaire est une table avec de nombreux aliments (duh), comme le Pain, le Riz, les Haricots, etc. Repas est un tableau qui identifie les aliments que l'utilisateur a choisi avec leurs détails.
Donc, ma compréhension était que Repas eu beaucoup de Alimentaire (que j'ai ajouté avant) mais Alimentaire ne requiert aucune relation avec Repas, comme il vient d'contient des données et n'est pas modifiée après j'ai d'abord remplir. Mais quand j'ai essayé de les joindre par:
db.meal.findAll({ include : [db.food] }).then(function (meals) {
console.log(JSON.stringify(meals));
});
J'ai eu l'erreur suivante:
Unhandled rejection Error: food is not associated to meal!
Quelqu'un peut-il expliquer ce que je dois faire? Je pense que cela a à voir avec les relations, mais je ne pouvais pas trouver de documentation sur les toute bonne explication de ce que je dois faire.
Merci!
Edit: la Lecture de la documentation (de nouveau), l'exemple du bon sens, mais je ne pense pas que l'exemple est applicable sur ma situation, parce que sur leur exemple, l'Utilisateur a une Tâche, et la Tâche appartient à l'Utilisateur. Mais sur mon cas, la Nourriture n'appartient pas à un Repas, parce que de nombreux les Repas peuvent avoir la même Nourriture en quantités différentes (ou pour les différents utilisateurs).
OriginalL'auteur leofontes | 2016-06-28
Vous devez vous connecter pour publier un commentaire.
Le problème est que la relation doit être défini de deux manières. Actuellement, Sequelize sait comment obtenir de la Nourriture -> Repas en raison de
mais il ne sait pas comment obtenir de Repas -> de la Nourriture. C'est pourquoi vous devez définir la même relation dans l'autre sens, comme suit:
Cela ne veut pas ajouter de nouveau touches, car il permettrait de définir
meal.idFood
qui vous défini avec votre première déclaration.Maintenant, vous devriez être en mesure d'exécuter
Comme chaque aliment?
Jamais l'esprit, j'ai tout compris, merci beaucoup!
Super! Vous êtes les bienvenus.
Merci, j'ai passé une journée complète, sans succès, avant que je trouve cette réponse.
OriginalL'auteur Steffen Langer
Si vous utilisez un alias sur l'association (
{ as: 'Food' }
) vous avez besoin de l'utiliser sur l'instruction include.De sorte qu'il serait comme ça:
Plus d'informations ici.
La lecture de la documentation (encore une fois), l'exemple du bon sens, mais je ne crois pas que l'exemple est applicable sur ma situation, parce que sur leur exemple, l'Utilisateur a une Tâche, et la Tâche appartient à l'Utilisateur. Mais sur mon cas, la Nourriture n'appartient pas à un Repas, parce que de nombreux les Repas peuvent avoir la même Nourriture en quantités différentes (ou pour les différents utilisateurs). Comment puis-je obtenir autour de qui?
dans votre situation, vous devez mettre en œuvre plusieurs-à-plusieurs relations, un repas peut avoir de nombreux aliments, et de la nourriture peut être utilisé dans de multiples repas, ce qui fait du sens. Suivez la documentation pour mettre en œuvre ce type de relation.
OriginalL'auteur oleh.meleshko