Sequelize - 自我引用有很多关系
Posted
技术标签:
【中文标题】Sequelize - 自我引用有很多关系【英文标题】:Sequelize - self references has many relation 【发布时间】: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);
感谢您的帮助!
【问题讨论】:
【参考方案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 是从哪里来的?以上是关于Sequelize - 自我引用有很多关系的主要内容,如果未能解决你的问题,请参考以下文章