HasManyThrough关系是否可能超过两个级别?

时间:2014-02-06 04:53:48

标签: laravel eloquent

我有以下型号:

Product
BaseProduct
BaseCode
Series

它们中的每一个都是独立的实体,但它们是相关的。

ProductBaseProduct的外键,BaseProductBaseCode的外键,BaseCodeSeries的外键

我在BaseCode模型中指定了一个方法,因此我可以选择与该特定Products相关的所有BaseCode

public function Products()
{
    return $this->hasManyThrough('Product', 'BaseProduct', 'BaseCodeId', 'BaseProductId');
}

BaseCodeIdBaseCode的PK和BaseProduct中指向该PK的FK,而BaseProductIdBaseProduct的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

2 个答案:

答案 0 :(得分:6)

我对4.1有点新,但看起来好像hasManyThrough()并非设计用于您正在寻找的关系类型,而且实际上只是两级深度预测加载的快捷方式。

尝试传统的渴望加载......

$data = Product::with('BaseProduct.BaseCode.Series');

您需要确保在模型中根据需要设置关系,而不是调用模型名称,您将需要调用定义关系的方法。

另外,使用protected $primaryKey = 'SeriesID'等确保您的模型知道主键是什么......

答案 1 :(得分:0)

我创建了一个apply from: '../publish.gradle'级的无限关系:Repository on GitHub

安装后,您可以像这样使用它:

HasManyThrough