2014-10-29 101 views
0

我有3個機型:BasketProductAssetLaravel關係-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;的產品,以獲得第一個資產添加到購物籃的產品。

+0

試試這個https://github.com/ jarektkaczyk/Eloquent-triple-pivot – 2014-10-29 16:09:40

+0

如果我正確地理解了你的這種關係中的'多'部分實際上是一種誤稱 - 它們的工作方式有一些限制。也就是說,給定一個「資產」和「產品」組合,總是隻有一個「產品」匹配(無論一般情況下,「資產」是否屬於「產品」和「籃子」 s等)所以,如果是這種情況,我們有一些工作(但你能確認嗎?)。然而,使用正常的Eloquent關係是不可行的,因爲給定的「資產」實例不知道它從哪個潛在的多個「籃子」中檢索。 – alexrussell 2014-10-29 16:35:10

+0

@JarekTkaczyk看起來很理想我想 - 有沒有什麼方法可以在Composer中輕鬆使用? – Joe 2014-10-29 16:38:36

回答