2017-09-30 4 views
0

Je possède ce 3 modèles:Sequelize BelongsToMany: colonne personnalisée dans la clause WHERE

var User = sequelize.define('users', { 
    name: { 
     type: DataTypes.STRING(50), 
     field: 'name' 
    } 
}); 

var Book = sequelize.define('books', { 
    name: { 
     type: DataTypes.STRING(50), 
     field: 'name' 
    } 
}); 

var UserBook = sequelize.define('userbook', { 
    validated: { 
     type: DataTypes.INTEGER, 
     field: 'validated', 
     defaultValue: 0 
    } 
}); 

Book.belongsToMany(User, {through: UserBook, foreignKey: 'bookId'}); 
User.belongsToMany(Book, {through: UserBook, foreignKey: 'userId'}); 

Maintenant, je veux obtenir des livres pour un utilisateur où validé = 1

J'ai essayé:

User.findOne({ 
    where: { id: req.session.user.id } 
}) 
.then(function(user){ 
    user.getBooks({ 
     through: { validated: 1 } 
    }) 
    .then(function(books){ 
     return res.json({success: true, books: books}); 
    }) 
}); 

Mais il retourne tous les livres sans vérifier pour validé = 1

Comment obtenir tous les livres avec validé = 1 ?

Merci

Répondre

1

Je vous ai essayé ceci:

User.findOne({ 
    where: { id: req.session.user.id } 
}) 
    .then(function (user) { 
    user.getBooks({ 
     where: { validated: 1 } 
    }) 
     .then(function (books) { 
     return res.json({ success: true, books: books }); 
     }) 
    }); 

?

Edit (cela fonctionne):

User.findById(req.session.user.id, { 
    include: [ 
    { 
     model: Book, 
     through: { 
     where: { validated: 1 } 
     } 
    } 
    ] 
}).then((user) => { 
    console.log(user); 
}) 
+0

Oui, mais il jette cette erreur: 'ER_BAD_FIELD_ERROR: Unknown column 'books.validated' Où clause' –

+1

Quel est le résultat de ceci: User.findById (req. session.user.id, { comprennent: [{ modèle: livre, par: { où: {validé: 1}} } ] }.) puis ((utilisateur) => { console .log (utilisateur); }) – Arkerone

+0

Oui cela fonctionne! S'il vous plaît mettre à jour votre réponse –