正如lukasgeiter所述,添加到模型中的belongsToMany()
關係將允許您訪問相關數據。
還有一點需要注意的是,如果將連接表名稱更改爲item_reciept
,則可以在模型中定義多對多關係,而無需專門指定連接表。當Laravel在沒有指定連接表名的情況下看到belongsToMany
方法時,它會查找蛇形案件涉及的兩個模型的名稱以及小寫名稱的字母順序。
你的模型方法應該是:
class Receipt extends Eloquent{
public function items(){
return $this->belongsToMany('Item');
}
}
class Item extends Eloquent{
public function reciepts(){
return $this->belongsToMany('Reciept');
}
}
我能理解,如果你不希望重命名items_sold
表,因爲它是特定的名稱表示它是使用過去只是一個連接表。
另一件事需要注意添加這些關係的模型是,它允許您與您的要求可能在你的情況是有幫助的執行eager loading。
比方說,你想獲得的所有項目特定收到它的ID都一氣呵成。您可以使用以下請求獲得一切融合在一起:
$receiptAndItems = Receipt::with('items')->find($recieptId);
這將返回無論在您的特定收據記錄和細節的關鍵items
與所有爲給收據相關項目記錄:
// Your `receipt` record
// this is the output when you add `->toArray()` at the end to make it a bit easier to read
array (size=7)
'id' => int 2
'name' => string 'Foo' (length=12)
'created_at' => string '2014-11-22 16:30:02' (length=19)
'updated_at' => string '2014-11-22 16:30:02' (length=19)
'items' =>
array (size=3)
0 =>
array (size=7)
'id' => int 1
'name' => string 'Bar' (length=13)
'created_at' => string '2014-11-22 16:30:02' (length=19)
'updated_at' => string '2014-11-22 16:30:02' (length=19)
'pivot' =>
array (size=2)
...
1 =>
array (size=7)
'id' => int 2
'name' => string 'Baz' (length=20)
'created_at' => string '2014-11-22 16:30:02' (length=19)
'updated_at' => string '2014-11-22 16:30:02' (length=19)
'pivot' =>
array (size=2)
...
2 =>
array (size=7)
'id' => int 3
'name' => string 'FooBarBaz' (length=18)
'created_at' => string '2014-11-22 16:30:02' (length=19)
'updated_at' => string '2014-11-22 16:30:02' (length=19)
'pivot' =>
array (size=2)
從「items_sold'.'id' ='items'.'id'」內容加入'items_sold'中選擇'items'。*,'items_sold'.'receipt_id'其中'items_sold'.'receipt_id' = 1 這是聲明雄辯時許,everithing是正確的,除了這部分「'items_sold'.'id' ='items'.'id'」應該是「'items_sold'.'item _id' ='items'.'id'「 – user3369524 2014-11-23 15:37:34