我有三个模型:
Entity
- id
...
Event
- id
- metadata_field_id
- entity_id
- value (TEXT)
MetadataField
- id
- name (TEXT)
有一组成对的 MetadataField.name
s和 Event.value
s、 我想构建一个查询来选择匹配这些对的实体:应该是全局的 AND
然后每一个事件, Event.value
应该是数组中的当前值,并且 Event.MetadataField.name
应为当前名称。
我不知道如何使用sequelize构建这个查询(我甚至不知道查询应该是什么样子)。
我试过的是:
const eventValues = [["some_name", "some_value"], ["another_name", "another_value"]]
if (eventValues.length) {
queryObj.include = [{
model: Event,
where: {
[Op.and]: eventValues.map(c => ({
value: {
[Op.like]: `%${c[1]}%`
}
}))
},
include: [{
model: MetadataField,
[Op.and]: eventValues.map(c => ({
name: {
[Op.like]: c[0]
}
}))
}]
}]
}
return Entity.findAll(queryObj)
但这显然行不通,因为它想选择 MetadataField
具有所有提供的名称和相同值的。
这应该如何实施?
1条答案
按热度按时间yrefmtwq1#
它不是强制要求您只能在include model内编写where条件,但是您也可以在include model外编写where条件,但是在这种情况下,您所需要的就是定义表名b/w
'$table_name.field_name$'
,所以,给你:
注意:您可能需要根据我写的表名更改表名
// <---- Magic is here