我有以下型号:
Product
BaseProduct
BaseCode
Series
它们中的每一个都是独立的实体,但它们是相关的。
Product
有BaseProduct
的外键,BaseProduct
有BaseCode
的外键,BaseCode
有Series
的外键
我在BaseCode
模型中指定了一个方法,因此我可以选择与该特定Products
相关的所有BaseCode
:
public function Products()
{
return $this->hasManyThrough('Product', 'BaseProduct', 'BaseCodeId', 'BaseProductId');
}
BaseCodeId
是BaseCode
的PK和BaseProduct
中指向该PK的FK,而BaseProductId
是BaseProduct
的PK,在Product
表中,有一个指向它的FK。
这一切都很好,对我来说只是花花公子。
我想更进一步,并在我的Series
模型中定义如下内容:
public function Products()
{
//It's here that I'd have no idea what to do - is there something like a three-level deep "hasManyThroughThrough" or something?
return $this->BaseProducts()-> /* and then whatever I'd do here to get the products */
}
public function BaseProducts()
{
return $this->hasManyThrough('BaseProduct', 'BaseCode', 'SeriesId', 'BaseCodeId');
}
如何获得与Product
相关联的所有Series
?
答案 0 :(得分:6)
我对4.1有点新,但看起来好像hasManyThrough()
并非设计用于您正在寻找的关系类型,而且实际上只是两级深度预测加载的快捷方式。
尝试传统的渴望加载......
$data = Product::with('BaseProduct.BaseCode.Series');
您需要确保在模型中根据需要设置关系,而不是调用模型名称,您将需要调用定义关系的方法。
另外,使用protected $primaryKey = 'SeriesID'
等确保您的模型知道主键是什么......
答案 1 :(得分:0)