使用 Node 和 sequelize 关联对象的 Where 子句

Posted

技术标签:

【中文标题】使用 Node 和 sequelize 关联对象的 Where 子句【英文标题】:Where clause for associated objects with Node and sequelize 【发布时间】:2014-11-02 05:55:11 【问题描述】:

我的书籍有作者和编辑。我想查询所有标题为 '%gone% 和 author.name 为 '%paul%' 的书籍 - 我找不到有关这样做的文档,但我已经尝试了各种格式已经用谷歌搜索了。

尝试在包括上使用过滤器:

var includes = [
   "model": db.User, as: 'Author', through: "where": "name":  like: '%paul%'
];

var filter =  title:  like: '%gone%';

return Book.findAll( include: includes, order: 'id desc', where: filter);

虽然对标题的限制有效,但作者姓名被忽略(无错误)。

没有“通过”的变化(相同的结果 - 不影响结果集):

var includes = [
   "model": db.User, as: 'Author', "where": "name":  like: '%paul%'   
];

以及我如何主动认为它可能会起作用(导致错误):

var filter =  title:  like: '%gone%', 'author.name' :  like : '%paul%'  ;

有任何线索或指向可以帮助我执行此操作的文档吗??

谢谢。

型号:

var User = sequelize.define('User', 

    name: 
      type: DataTypes.STRING
    ,
...
    classMethods: 
      associate: function (models) 
        User.hasMany(Book,  as: 'Author', foreignKey: 'author_id' );
        User.hasMany(Book,  as: 'Editor', foreignKey: 'editor_id' );
      ,
...



var Book = sequelize.define('Book', 
    title: 
      type: DataTypes.STRING,
      len: [20]
    ,
...
    classMethods: 
      associate: function (models) 
        Book.belongsTo(User,  as: 'Author', foreignKey: 'author_id' );
        Book.belongsTo(User,  as: 'Editor', foreignKey: 'editor_id' );
      ,
...

【问题讨论】:

【参考方案1】:

我通过删除用户关联中的“as”来预订到:

User.hasMany(Book,  foreignKey: 'author_id' );
User.hasMany(Book,  foreignKey: 'editor_id' );

然后我可以按预期过滤:

var includes = [
  model: db.User, as: 'Author',
  model: db.User, as: 'Editor'
];    
var filter =  title:  like: '%gone%', 'Author.name' :  like : '%paul%'  ;
return Book.findAll( include: includes, order: 'id desc', where: filter);

它有助于打开 SQL 语句的日志记录,如下所述:How can I see the SQL generated by Sequelize.js?

【讨论】:

你有没有找到合适的续集方法来做到这一点?如果是这样,您应该发布它。

以上是关于使用 Node 和 sequelize 关联对象的 Where 子句的主要内容,如果未能解决你的问题,请参考以下文章

Node.js,ORM框架,Sequelize,入门及增、删、改、查代码案例

Node.js / Sequelize.js / Express.js - 如何插入多对多关联? (同步/异步?)

使用 Sequelize 仅从行和关联中获取值

Sequelize models - 在 Node 中同步时设置关联

使用 sequelize 创建具有关联层次结构的对象

使用 Sequelize.js 和 PostgreSQL 在关联模型上查询 JSONB 字段