2017-09-30 2 views
0

Ich habe diese 3 Modelle:Sequelize BelongsToMany: benutzerdefinierte Spalte in WHERE-Klausel

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'}); 

Jetzt möchte ich Bücher für einen Benutzer bekommen, wo validiert = 1

Ich habe dies versucht:

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}); 
    }) 
}); 

Aber es gibt alle Bücher ohne Überprüfung validiert = 1

Wie alle Bücher bekommen mit validierten = 1 ?

Danke

Antwort

1

Ich habe Sie versucht, dieses:

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 (es funktioniert):

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

Ja, aber es wirft diesen Fehler: 'ER_BAD_FIELD_ERROR: Unknown column 'books.validated' in dem clause' –

+1

Was das Ergebnis dieser ist: User.findById (erf. session.user.id, { umfassen: [{ Modell: Buch, durch: { wobei: {validiert: 1} } } ] }.), dann ((Benutzer) => { Konsole .log (Benutzer); }) – Arkerone

+0

Ja, es funktioniert! Bitte aktualisieren Sie Ihre Antwort –

Verwandte Themen