如何获取至少有 1 个关联行与 sequelize 的行
Posted
技术标签:
【中文标题】如何获取至少有 1 个关联行与 sequelize 的行【英文标题】:how to get rows that has at least 1 association row with sequelize 【发布时间】:2020-07-24 00:58:03 【问题描述】:我有这样的“成分”和“日志”表
[Ingredient Table]
id
..
...
[Log Table]
id
Ingredient_id
record_date
..
...
关系是Log.belongsTo(Ingredeint)
我怎样才能找到至少有 1 行 Log 的所有成分?
我的意思是当我搜索成分时,如果没有相关的登录成分,我不想在我的搜索结果中包含该成分。
我现在所做的是
const ingredients = await Ingredient.findAll(
include:
model: Log
,
group: "id",
attributes:
include: [
[sequelize.fn("COUNT", sequelize.col("record_date")), "order_count"]
]
)
const sortedIngredient = ingredients
.filter(ingredient => ingredient.dataValues.order_count > 0)
但我认为会有更好的方法。
感谢您阅读本文。
【问题讨论】:
【参考方案1】:如果我对您的理解正确,您想在您的包含中进行内连接,那么您只会返回在包含的模型中具有某些匹配的成分。
尝试将包含更改为:
include:
model: Log
required: true, // <-- Add this row
有关 require 的更多信息可以在文档中找到:https://sequelize.org/master/class/lib/model.js~Model.html#static-method-findAll
另一个可能对您有所帮助的选项是添加 have 以过滤聚合列,如下所示:
const ingredients = await Ingredient.findAll(
include:
model: Log,
,
group: "id",
attributes:
include: [
[sequelize.fn("COUNT", sequelize.col("record_date")), "order_count"],
],
,
having: sequelize.literal("`order_count` > 0"), // <-- Add this row
);
这有帮助吗?
【讨论】:
以上是关于如何获取至少有 1 个关联行与 sequelize 的行的主要内容,如果未能解决你的问题,请参考以下文章
Sequelize - 如何从一个表中获取未被另一表关联的条目