这是我的模型定义:
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表达式,就像在这种情况下一样。所以我不知道这是不是正确的做法。
答案 0 :(得分:74)
不需要"在"属性,sequelize auto定义这个。只需设置数组。
Tag.findAll({
where: {
id: [1,2,3,4]
}
}).then(...)
答案 1 :(得分:1)
Sequelize v5的更新示例:
await Tag.findAll({
where: {
id: {
[Sequelize.Op.in]: [1, 2, 3, 4]
}
}
});
答案 2 :(得分:0)
in
属性可以在4.42版中使用
Tag.findAll({
where: { id: {in: [1,2,3,4]} }
}).then(...)
您可以对排除的值使用notIn
属性。
Tag.findAll({
where: { id: {notIn: [1,2,3,4]} }
}).then(...)
答案 3 :(得分:0)
我知道这很老了。但我很确定您要寻找的东西如下。其中至少有一个应该可以解决问题。可能两者都有。我目前无法进行测试,因为我处于更改过43个文件的意大利面条代码野兽的中间。找到时间后,我将通过实际测试进行更新。
(我现在发布的原因是,所有其他人似乎都没有实际上回答所提出的问题,但是他们确实回答了我到这里时遇到的问题。)
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) {
...
});
Event
.findAndCountAll({
include: [
{
model: Tag,
as: 'tags',
where: { id: {in: [1,2,3,4]} },
}
],
order: order,
limit: pageSize,
offset: pageSize * (page - 1),
})
.success(function(result) {
...
});
答案 4 :(得分:-2)
替换为where : { id : { $in : [1,2,3,4]}}
do
$$
declare
l_rec record;
l_stmt text;
begin
for l_rec in (select schemaname, viewname
from pg_views
where schemaname = 'parlgov')
loop
l_stmt := format('drop view if exists %I.%I cascade', l_vrec.schemaname, vrec.viewname);
raise notice 'Dropping %', l_stmt;
execute l_stmt;
end loop;
end;
$$
;