web-dev-qa-db-fra.com

Erreur séquentielle lors de l'utilisation de "où" et "dans" sur un sous-tableau

Voici ma définition de modèle:

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

En mots, c'est: il y a des événements et des balises. Les événements sont marqués avec de nombreuses balises.

J'essaie d'exécuter cette requête:

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) {

    ...
});

Mais je reçois cette erreur:

   \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

Qu'est-ce que je fais mal?

J'ai utilisé avant l'expression "in", par exemple ici:

 Tag
 .find({
      where: {id: {in: [1,2,3,4]}}
 }).success(...)

Et cela a très bien fonctionné.

Je n'ai cependant jamais utilisé l'expression in avec un sous-tableau, comme dans ce cas. Donc je ne sais pas si c'est la bonne façon de procéder.

27
sports

Pas besoin de propriété "in", définissez automatiquement ceci. Définissez simplement le tableau.

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

in propriété utilisable à la version 4.42

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

Et vous pouvez utiliser la propriété notIn pour les valeurs exclues.

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

http://docs.sequelizejs.com/manual/querying.html#operators

1
selmansamet