0
我有3個機型:Basket
,Product
和Asset
。Laravel關係-3路表
A Basket
可以包含許多Asset
s,並且一個資產可以出現在多個Basket
s中。
A Product
可以有多個Asset
s,但Asset
也可以分配給多個Product
。
目標是將Asset
s變成Basket
,同時仍然知道它是從哪個Product
中添加的。
我設想有表結構是這樣的:
-------------------------------------
| basket_id | asset_id | product_id |
-------------------------------------
| 1 | 1 | 1 |
| 1 | 3 | 1 |
| 1 | 15 | 2 |
| 2 | 23 | 1 |
| 2 | 3 | 1 |
| 3 | 79 | 3 |
-------------------------------------
我還想象的是這樣一種模式設置:
class Basket extends Eloquent {
public function assets() {
return $this->belongsToMany('Asset');
}
}
class Product extends Eloquent {
public function assets() {
return $this->belongsToMany('Asset');
}
}
class Asset extends Eloquent {
public function products() {
return $this->belongsToMany('Product');
}
public function product() {
// This should return the product from the product_id column
}
}
我不知道如何去編寫Asset::product()
,以便它返回相應的Product
。
我想調用類似Basket::find(1)->assets()->first()->product;
的產品,以獲得第一個資產添加到購物籃的產品。
試試這個https://github.com/ jarektkaczyk/Eloquent-triple-pivot – 2014-10-29 16:09:40
如果我正確地理解了你的這種關係中的'多'部分實際上是一種誤稱 - 它們的工作方式有一些限制。也就是說,給定一個「資產」和「產品」組合,總是隻有一個「產品」匹配(無論一般情況下,「資產」是否屬於「產品」和「籃子」 s等)所以,如果是這種情況,我們有一些工作(但你能確認嗎?)。然而,使用正常的Eloquent關係是不可行的,因爲給定的「資產」實例不知道它從哪個潛在的多個「籃子」中檢索。 – alexrussell 2014-10-29 16:35:10
@JarekTkaczyk看起來很理想我想 - 有沒有什麼方法可以在Composer中輕鬆使用? – Joe 2014-10-29 16:38:36