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']
);
}
}
谢谢,先生。经过一番艰苦的挖掘和胡闹之后,我还不能雄辩地按照我所希望的方式行事,并且得出了同样的结论。