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