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 添加自定义函数?

快递js + Sequelize和钩子

如何在关联表Sequelize js中获取自定义字段

Sequelize.js - 连接子句中的子选择

如何在 Sequelize 中的导入模型中创建自定义方法或函数

Sequelize(或清除 SQL)查询以选择包含 JSON 字段中的值的行?