これは私のモデル定義です:
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式を使用したことはありません。ですから、それが正しい方法かどうかはわかりません。
「in」プロパティは必要ありません。これを自動定義してください。配列を設定するだけです。
Tag.findAll({
where: {
id: [1,2,3,4]
}
}).then(...)
in
バージョン4.42で使用できるプロパティ
Tag.findAll({
where: { id: {in: [1,2,3,4]} }
}).then(...)
また、除外値にnotIn
プロパティを使用できます。
Tag.findAll({
where: { id: {notIn: [1,2,3,4]} }
}).then(...)