我有三种模式:
Entity
- id
...
Event
- id
- metadata_field_id
- entity_id
- value (TEXT)
MetadataField
- id
- name (TEXT)
拥有MetadataField.name
和Event.value
对的数组,我想构建一个查询,选择匹配这些对的实体:应该是全局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)
但显然这不起作用,因为它想要选择{em>所有所提供名称的MetadataField
名称,并且值相同。
应如何实施?
答案 0 :(得分:1)
您不能强制要求只在包含模型的情况下写入条件,但您也可以在其中写出,但在这种情况下,您只需要定义表格名称b / w <div class="container-fluid">
<div class="row">
<!-- Menú lateral -->
{%include menu-lateral.html%}
<div class="col-sm-10" id="main-content-post">
<div class="row">
<div class="col-sm-10">
<h2>{{ post.title }}</h2>
{{content}}
{% if post.category == "textual" %}
{% include disqus.html %}
{% endif %}
</div>
</div>
</div>
</div>
</div>
,
所以,你走了:
'$table_name.field_name$'
注意:您可能需要根据您的名称更改表名称 写了
const eventValues = [["some_name", "some_value"], ["another_name", "another_value"]] if (eventValues.length) { queryObj.include = [{ model: Event, include: [{ model: MetadataField }] }], queryObj.where = { [Op.or]: eventValues.map(c => ({ '$events.value$' : { // <---- Magic is here [Op.like]: `%${c[1]}%` } , '$metadata_fields.name$' : { // <---- Magic is here [Op.like]: c[0] } })) } } return Entity.findAll(queryObj)