Подтвердить что ты не робот

Исключить ошибку при использовании "where" и "в" на подмассиве

Это мое определение модели:

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

В словах это: есть события и теги. События отмечены многими тегами.

Я пытаюсь запустить этот запрос:

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

    ...
});

Но я получаю эту ошибку:

   \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

Что я делаю неправильно?

Я использовал перед выражением "in", например здесь:

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

И это сработало отлично.

Я никогда не использовал выражение in с суб-массивом, как в этом случае. Поэтому я не знаю, правильно ли это сделать.

4b9b3361

Ответ 1

Не нужно "в свойстве", а потом автоматически определите это. Просто установите массив.

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

Ответ 2

Свойство in можно использовать в версии 4.42

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

И вы можете использовать свойство notIn для исключенных значений.

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

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

Ответ 3

замените на $in

where : { id : { $in : [1,2,3,4]}}