使用 withRelated 通过另一个连接 table 连接 table
Joining a table through another join table using withRelated
我有 3 个 tables:
Order: id
Item: id
OrderItems: order_id, item_id
我希望能够获取特定订单并获取与该订单相关的所有项目,而不会因执行 Order.where(...).fetch({withRelated: ['orderItem.item'])
.
而引入混乱
理想情况下我想做 Order.where(...).fetch({withRelated: ['items'])
并且 items
关系知道要通过 OrderItems
table 来获取信息。
我试过关系
items() {
return this.hasMany('Item').through('OrderItem')
}
但这似乎并没有像我预期的那样工作。
是否可以使用 Bookshelf 的 API 而无需编写手动连接?
你试过的关系:
items() {
return this.hasMany('Item').through('OrderItem')
}
到书架的方式:
Item(id, OrderItem_id) -> OrderItem(id, Order_id) -> Order(id)
或 1:n:m 关系。
但是您的数据库显示:
Item(id) <- OrderItem(Item_id, Order_id) -> Order(id)
Bookshelf 地图上的这种关系更好belongsToMany()
:
bookshelf.plugin('registry') // to ease the cyclic mapping
const Item = bookshelf.Model.extend({
tableName: 'item',
orders: function() {
this.belongsToMany('Order', 'OrderItem')
},
})
bookshelf.model('Item', Item)
const Order = bookshelf.Model.extend({
tableName: 'order',
items: function() {
//return this.hasMany('Item').through('OrderItem')
return this.belongsToMany('Item', 'OrderItem')
},
})
bookshelf.model('Order', Order)
请注意,在您开始将有用的数据放在中间 table 之前,您不需要为其创建模型。
这样,Order.where(...).fetch({withRelated: 'items'}).then(...)
查询应该按预期工作。
我有 3 个 tables:
Order: id
Item: id
OrderItems: order_id, item_id
我希望能够获取特定订单并获取与该订单相关的所有项目,而不会因执行 Order.where(...).fetch({withRelated: ['orderItem.item'])
.
理想情况下我想做 Order.where(...).fetch({withRelated: ['items'])
并且 items
关系知道要通过 OrderItems
table 来获取信息。
我试过关系
items() {
return this.hasMany('Item').through('OrderItem')
}
但这似乎并没有像我预期的那样工作。
是否可以使用 Bookshelf 的 API 而无需编写手动连接?
你试过的关系:
items() {
return this.hasMany('Item').through('OrderItem')
}
到书架的方式:
Item(id, OrderItem_id) -> OrderItem(id, Order_id) -> Order(id)
或 1:n:m 关系。
但是您的数据库显示:
Item(id) <- OrderItem(Item_id, Order_id) -> Order(id)
Bookshelf 地图上的这种关系更好belongsToMany()
:
bookshelf.plugin('registry') // to ease the cyclic mapping
const Item = bookshelf.Model.extend({
tableName: 'item',
orders: function() {
this.belongsToMany('Order', 'OrderItem')
},
})
bookshelf.model('Item', Item)
const Order = bookshelf.Model.extend({
tableName: 'order',
items: function() {
//return this.hasMany('Item').through('OrderItem')
return this.belongsToMany('Item', 'OrderItem')
},
})
bookshelf.model('Order', Order)
请注意,在您开始将有用的数据放在中间 table 之前,您不需要为其创建模型。
这样,Order.where(...).fetch({withRelated: 'items'}).then(...)
查询应该按预期工作。