【问题标题】:Sequelize - self references has many relationSequelize - 自我引用有很多关系
【发布时间】:2014-09-05 00:37:13
【问题描述】:

我正在将 Sequelize 与 Mysql 一起使用。

我有一张桌子:

物品

包含以下字段:

{Id,Name,Price}

我想在项目中与他自己建立一个自我关系。 能够执行 Item.subItems 并获取属于该项目的所有子项目的列表的目标。

请告诉我如何在

中包含新模型

包括:[{model:SubItem}]... 当我获取查询时。

我尝试了很多关系选项:

Item.hasMany(Item,{ through: SubItem,as:'subItems'});

Item.hasMany(Item);

感谢您的帮助!

【问题讨论】:

    标签: javascript node.js sequelize.js


    【解决方案1】:

    创建自引用

    Item.hasMany(Item, {as: 'Subitems'}) 
    

    使用包含查找子项

    Item.find({where:{name: "Coffee"},include:[{model: Item, as: 'Subitems'}]})
    

    请参阅下面的示例代码,

    var Sequelize = require('sequelize')
    , sequelize = new Sequelize("test", "root", "root", {logging: false})
    , Item    = sequelize.define('Item', { name: Sequelize.STRING })
    
    Item.hasMany(Item, {as: 'Subitems'})
    
    
    var chainer = new Sequelize.Utils.QueryChainer
    , item  = Item.build({ name: 'Coffee' })
    , subitem1 = Item.build({ name: 'Flat White' })
    , subitem2 = Item.build({ name: 'Latte' })
    
    
    sequelize.sync({force:true}).on('success', function() {
      chainer
        .add(item.save())
        .add(subitem1.save())
        .add(subitem2.save())
    
      chainer.run().on('success', function() {
        item.setSubitems([subitem1, subitem2]).on('success', function() { 
    
        /*  One way 
          item.getSubitems().on('success', function(subitems) {
            console.log("subitems: " + subitems.map(function(subitem) { 
              return subitem.name 
            }))
          })
        */
    
        //The include way you asked
        Item.find({where:{name: "Coffee"},include:[{model: Item, as: 'Subitems'}]}).success(function(item) {
             console.log("item:" + JSON.stringify(item));
        })
    
      })
    }).on('failure', function(err) {
        console.log(err)
      })
    })
    

    日志数据如下:

    item:{"id":1,"name":"Coffee","createdAt":"2014-08-05T06:25:47.000Z","updatedAt":"2014-08-05T06:25: 47.000Z","ItemId":null,"subitems":[{"id":2,"name":"Flat White","createdAt":"2014-08-05T06:25:47.000Z","updatedAt ":"2014-08-05T06:25:47.000Z","ItemId":1},{"id":3,"name":"Latte","createdAt":"2014-08-05T06:25: 47.000Z","updatedAt":"2014-08-05T06:25:47.000Z","ItemId":1}]}

    【讨论】:

    • 嗨——尽管这个答案已经很老了——你最终能否详细说明所需的迁移/数据库架构?
    • @siyang 如果我有多个“子项”(如“子项1”、“子项2”)怎么办?就我而言,我有“主题”模型,我想存储它的继任者 ID 和前任 ID。
    • setSubitems 是从哪里来的?
    猜你喜欢
    • 2021-09-15
    • 2022-07-08
    • 2020-10-31
    • 2015-04-06
    • 2019-02-01
    • 2014-07-10
    • 2018-08-19
    • 2017-02-05
    相关资源
    最近更新 更多