2 votes

Veuillez traduire ceci en conservant les mêmes balises HTML s'il y a lieu de l'anglais au français : Sequelize Inclure le modèle mais sans le nom de la table

Je suis novice pour Sequelize

J'ai un problème avec le "Nested Eager Loading"

J'ai 2 tables avec une relation 1 à plusieurs

  1. Table Comment

  2. Table Utilisateur

J'utilise ce code pour la requête

Comment.findAll({
   include: [User]
})

J'ai obtenu

{
    id: 1,
    comment: "test",
    user: {
       id: 3,
       name: "quelqu'un"
    }
}

Mais je m'attendais à un résultat comme ceci

{
    id: 1,
    comment: "test",
    user_id: 3,
    user_name: "quelqu'un"
}

J'ai lu plusieurs posts sur stackoverflow, il y a une solution mais elle ne fonctionne que pour la version 3.3

Comment.findAll({
   attributes: ['id', 'name', ['user.id','user_id'], ['user.name','user_name']],
   include: [{ model: User, attributes:[], nested: false, required: true }]
})

Comment.findAll({
   attributes: ['id', 'name', [Sequelize.col('user.id'),'user_id'], [Sequelize.col('user.name'),'user_name']],
   include: [{ model: User, attributes:[], nested: false, required: true }]
})

mais ça ne fonctionne pas pour moi.

Maintenant j'utilise sequelize 5.5.1 comment puis-je l'implémenter.

Est-ce que quelqu'un peut m'aider s'il vous plaît?

ma copine vient de me briser le cœur. vous êtes le seul qui peut guérir mon cœur en répondant à cette question.

1voto

Vous pouvez utiliser ce code pour obtenir la sortie souhaitée :

Comme Sequelize est basé sur des promesses, il est recommandé d'utiliser then et catch.

Comment.findAll({
   include: [User]
}).then(result=>
{
  let obj=
{
    id: result.item,
    comment: result.comment,
    user_id: result.user.id,
    user_name: result.user.name
};
console.log(JSON.stringify(obj));

}).catch(err=>
{
console.log(err);
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X