2014-07-23 3 views
7

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.

risposta

26

Nessuna necessità di proprietà "in", sequenziale auto definisce questo. Basta impostare la matrice.

Tag.findAll({ 
    where: { 
     id: [1,2,3,4] 
    } 
}).then(...) 
+0

Il mio ultimo pezzo di codice nella mia domanda (quello che stai "aggiustando") è già ok. Si prega di leggere l'intero post :) – sports

+0

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

+0

@Emanuelacolta Era una domanda incompresa e una risposta sbagliata, causa il mio pessimo inglese. Ma sono felice perché è utile a qualcuno :) – Enxtur

Problemi correlati