我有3张桌子:
<tr class="control">
<td class="label-cell left-label">
<div class="workitemlabel">
<label class="workitemcontrol-label" for="witc_135_txt" title="[Field Name: Process Start Date]">Start Date:</label>
</div>
</td>
<td class="control-cell">
<div class="workitemcontrol">
<div id="witc_135" class="combo input-text-box date-time drop">
<div class="wrap">
<input type="text" id="witc_135_txt" autocomplete="off" maxlength="255" title="7/7/2016 12:00:00 AM" aria-invalid="false">
</div>
<div class="drop bowtie-calendar bowtie-icon"></div>
</div>
</div>
</td>
</tr>
<tr class="control">
<td class="label-cell left-label">
<div class="workitemlabel">
<label class="workitemcontrol-label" for="witc_136_txt" title="[Field Name: P2P]">P2P:</label>
</div>
</td>
<td class="control-cell">
<div class="workitemcontrol">
<div id="witc_136" class="combo input-text-box date-time drop">
<div class="wrap">
<input type="text" id="witc_136_txt" autocomplete="off" maxlength="255" title="7/29/2016 12:00:00 AM" aria-invalid="false">
</div>
<div class="drop bowtie-calendar bowtie-icon"></div>
</div>
</div>
</td>
</tr>
<span></span>
Order: id
Item: id
我希望能够获取特定订单并获取与该订单相关的所有项目,而不会因执行OrderItems: order_id, item_id
而引入混乱。
理想情况下,我想Order.where(...).fetch({withRelated: ['orderItem.item'])
,Order.where(...).fetch({withRelated: ['items'])
关系知道通过items
表获取信息。
我尝试了这段关系
OrderItems
但这似乎不像我预期的那样有效。
这是否可以使用Bookshelf的API而无需编写手动连接?
答案 0 :(得分:0)
你试过的关系:
GET http://localhost:3000/posts/posttopic
书架的手段:
Item(id,OrderItem_id) - &gt; OrderItem(id,Order_id) - &gt;顺序(ID)
或1:n:m关系。
但你的数据库说:
Item(id)&lt; - OrderItem(Item_id,Order_id) - &gt;顺序(ID)
这种关于Bookshelf地图的关系更好地为belongsToMany()
:
items() {
return this.hasMany('Item').through('OrderItem')
}
请注意,在您开始在中间表上放置有用数据之前,您无需为其创建模型。
使用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)
查询按预期工作。