Sequelize JS 自定义查询与子选择
Posted
技术标签:
【中文标题】Sequelize JS 自定义查询与子选择【英文标题】:Sequelize JS custom query with sub selects 【发布时间】:2015-02-18 00:07:33 【问题描述】:我是 ORM 新手,不知道如何使用 ORM。 考虑到我有 5 张桌子:
标签、拍卖、用户、user_tag 和auction_tag
我正在使用 SequelizeJS,我怎样才能得到这样的查询?
select A.id, A.title, A.content, A.createdAt, U.id, U.picture, U.name
from Auction A, User U, User U2
where A.userId = U.id and U2.id = x
and exists (select AT.id
from Auction_Tag AT
where AT.auction = A.id
and AT.tag in ( select T.id
from Tag T, User_Tag UT
where U2.id = UT.user
and UT.tag = T.id
)
);
有什么想法吗?谢谢各位
【问题讨论】:
我找到了答案。 :sequelize.query("SELECT * FROM
users", type: sequelize.QueryTypes.SELECT) .then(function(users) // We don't need spread here, since only the results will be returned for select queries )
根据您与表的关系,您可以以比使用类似查询更简洁的方式(至少对于 ORM)实现这一点。
【参考方案1】:
假设使用 orm 可以将您从查询语言本身中抽象出来。 如果你愿意做一个嵌套请求,你应该使用你必须传递给 findAll 方法的选项对象的“where”属性。 我无法从你提供的信息中推断出你的结构,所以我举了一个我猜测最好的例子(作为拍卖你的拍卖模型和 userid 与用户相关的 id):
Auction.findAll(where: userid: 8 ).done(callback);
但是,如果您要使用相关的实体参数,比如 User.name,请使用它:
Auction.findAll(where: 'User.name': 'John' ).done(callback);
如果您发现自己使用 SQL 查询,也许您应该考虑不使用 ORM。
【讨论】:
以上是关于Sequelize JS 自定义查询与子选择的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Node.JS 中向 sequelize.js 添加自定义函数?