我对如何设置Laravel的Eloquent关系感到困惑,因此我可以显示其他表中的信息。
我有3张桌子:
1.tblBill
fields: id, title, total.
2.tblBillContent
fields: id, BillId, ItemId, qty, price
3.tblItemInfo
fields: id, itemName
我想在我的桌子上显示以下数据。查看:
id| itemName | qty | price | total | bill Id
1 itemNo1 33 10 330 1
2 itemNo2 20 11 220 1
截至目前,我只是使用普通的Eloquent查询:
$id = 1;
$items = BillContent::where('billId','=',$id)->get();
结果:
id| itemName | qty | price | total | bill Id
1 2(itemID) 33 10 330 1
2 3(itemID) 20 11 220 1
如何将itemID
替换为itemName
我将从tblItemInfo
字段获取哪些内容?我如何设置然后运行查询?如果我只使用普通查询构建器,我可以得到预期的结果。但我想知道如何使用Eloquent来做到这一点。
答案 0 :(得分:1)
实际上这很简单,你必须告诉Eloquent如何建立关系。在您的模型中(您的模型是否正确?)将相关列添加到彼此中;
// Bills
public function rows() {
return $this->hasMany('BillContents', 'bill_id');
}
// Items
public function bills() {
return $this->hasMany('BillContents', 'item_id');
}
// BillContent
public function item() {
return $this->belongsTo('Items', 'item_id');
}
public function bill() {
return $this->belongsTo('Bills', 'bill_id');
}
当您查询关系时,假设您要转储账单内容;
// Controller Side
$bill = Bills::find($id);
// Blade Template Side
@foreach ($bill->rows as $row) // See how we used ->items here?
<tr>
<td>{{$row->item->name}}</td> <!-- See how we used $row->item here? -->
</tr>
@endforeach
假设我们正在查看一个项目,我们希望看到我们使用它的账单;
// Controller Side
$item = Items::find($id);
// Blade Template Side
@foreach ($item->bills as $bill) // See how we used ->bills here?
<tr>
<td>{{$bill->id}}</td> <!-- See how we used $bill here? -->
</tr>
@endforeach
我可以创建更多示例,但是在Laravel文档中对此主题进行了深入解释,我认为您应该再次讨论它。