Questa è la mia definizione del modello:errore Sequelize quando si utilizza "dove" e "in" su un sottoarray
var Tag = sequelize.define('Tag', {
name: Sequelize.STRING
});
var Event = sequelize.define('Event', {
name: Sequelize.STRING,
});
Event.hasMany(Tag, {as: 'tags', through: 'event_tags', foreignKey: 'eventId'});
Tag.hasMany(Event, {as: 'events', through: 'event_tags', foreignKey: 'tagId'});
In parole questo è: ci sono gli eventi e le etichette. Gli eventi sono contrassegnati con molti tag.
sto cercando di eseguire questa query:
Event
.findAndCountAll({
include: [{model: Tag, as: 'tags'}],
where: {'tags.id': {in: [1,2,3,4]}},
order: order,
limit: pageSize,
offset: pageSize * (page - 1),
})
.success(function(result) {
...
});
Ma sto ottenendo questo errore:
\node_modules\sequelize\lib\dialects\abstract\query-generator.js:1134
var logicResult = Utils.getWhereLogic(logic, hash[key][logic]);
^
TypeError: Cannot read property 'in' of undefined
Che cosa sto facendo di sbagliato?
ho usato prima "in" di espressione, per esempio qui:
Tag
.find({
where: {id: {in: [1,2,3,4]}}
}).success(...)
E ha funzionato bene.
Non ho mai usato l'espressione in con un sotto-array, come in questo caso. Quindi non so se questo è il modo corretto per farlo.
Il mio ultimo pezzo di codice nella mia domanda (quello che stai "aggiustando") è già ok. Si prega di leggere l'intero post :) – sports
Enxtur, l'ho provato con findAll e solo in questo modo sono stati visualizzati tutti i record con un id in quell'array. In caso contrario, verrà visualizzato solo il record con il valore dell'ID uguale al valore del primo elemento dell'array. Grazie per l'aiuto! E 'stato molto utile! Tag.findAll ({where: {id: [0,1,2,3]}}). Then (tag => {res.json (tag);}); –
@Emanuelacolta Era una domanda incompresa e una risposta sbagliata, causa il mio pessimo inglese. Ma sono felice perché è utile a qualcuno :) – Enxtur