Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 是否有可能建立一种';它比两个层次更深?_Laravel_Eloquent - Fatal编程技术网

Laravel 是否有可能建立一种';它比两个层次更深?

Laravel 是否有可能建立一种';它比两个层次更深?,laravel,eloquent,Laravel,Eloquent,我有以下型号: Product BaseProduct BaseCode Series 它们每一个都是一个独立的实体,但它们是相关的 Product具有指向BaseProduct的外键,BaseProduct具有指向BaseCode的外键,BaseCode具有指向系列的外键 我已在我的BaseCode模型中指定了一种方法,因此我可以选择与该特定BaseCode相关的所有产品: 公共功能产品() { 返回$this->hasManyThrough('Product','BaseProduct',

我有以下型号:

Product
BaseProduct
BaseCode
Series
它们每一个都是一个独立的实体,但它们是相关的

Product
具有指向
BaseProduct
的外键,
BaseProduct
具有指向
BaseCode
的外键,
BaseCode
具有指向
系列的外键

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

公共功能产品()
{
返回$this->hasManyThrough('Product','BaseProduct','BaseCodeId','BaseProductId');
}
BaseCodeId
BaseCode
的主键和
BaseProduct
中指向该主键的FK,
BaseProductId
BaseProduct
的主键,在
Product
表中有一个指向该主键的FK

这一切都很好,对我来说非常有效

不过,我想更进一步,在我的
系列
模型中定义如下内容:

公共功能产品()
{
//就在这里,我不知道该怎么办——有没有像三层深的“Hasmanythrough”之类的东西?
返回$this->BaseProducts()->/*然后返回我在这里为获得产品所做的一切*/
}
公共功能基础产品()
{
返回$this->hasManyThrough('BaseProduct','BaseCode','SeriesId','BaseCodeId');
}

如何获得与
系列相关的所有
产品
呢?

我对4.1有些陌生,但它看起来似乎不是为您正在寻找的关系类型而设计的,实际上只是两级深度加载的快捷方式

尝试传统的快速加载

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

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


同样明显的是,通过使用
protected$primaryKey='SeriesID'
等,确保您的模型知道主键是什么。

我创建了一个
HasManyThrough
关系,级别不限:

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

类系列扩展模型{
使用\Staudenmeir\elokenthasmanydeep\hassrelationships;
公共功能产品(){
返回$this->hasManyDeep(产品::类,
[BaseCode::class,BaseProduct::class],
['SeriesId'、'BaseCodeId'、'BaseProductId']
);
}
}

谢谢,先生。经过一番艰苦的挖掘和胡闹之后,我还不能雄辩地按照我所希望的方式行事,并且得出了同样的结论。