如何在连接表中设置Laravel的Eloquent关系?

时间:2014-06-01 15:58:33

标签: php mysql laravel-4 eloquent

我对如何设置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来做到这一点。

1 个答案:

答案 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文档中对此主题进行了深入解释,我认为您应该再次讨论它。