Laravel 5.2 Eloquent - 通过多个关系查找所有 id
Laravel 5.2 Eloquent - Finding all id's through multiple relationships
这是我的关系:
一个基金属于一个planCode
planCode 属于 planType
我需要做的是找到属于某些计划类型的 fund_id。我试过这样的事情:
$plans = (new 'App\PlanType')->with('planCode.fund')->whereIn('code', ['PENS', 'ANN', 'WEL'])->get();
有了这个,我得到了三个计划代码,它们的关系是急切加载的。我想要的是所有 fund_id 的列表。我尝试了 $plans->lists('planCode.fund.fund_id', 'code')
,但是对于 fund_id,这个 returns 为空。有什么想法吗?
所以如果你的人际关系是这样的-
PlanCode has many Funds
Fund belongs to a PlanCode
PlanType has many PlanCodes
PlanCode belongs to a PlanType
然后你可以像这样添加另一个关系 -
PlanType has many Funds through PlanCodes
更新
将这样的函数添加到您的 PlanType class -
之后
public function funds() {
return $this->hasManyThrough('fund', 'planCode', PT, PC);
}
您可以像这样在 PlanType 模型上简单地访问 Funds -
$planType->Funds
查看文档 here。
是的,atefth 合二为一。 Laravel 有一个非常有用的关系,这样你就不必重复查询数据库来获得关系的关系。这就是 hasManyThrough 关系。
所以在这里,例如,您的 planType 模型有很多基金模型到 planCode 模型。您的 planType 模型应包含如下所示的基金方法,其中 PC 是基金 table 中的 planCode->id 列名称,PT 是 planCode table 中的 planType->id 列:
public function funds() {
return $this->hasManyThrough('fund', 'planCode', PT, PC);
}
您可能必须完全命名您的模型,具体取决于您的应用程序的结构。
这是我的关系:
一个基金属于一个planCode
planCode 属于 planType
我需要做的是找到属于某些计划类型的 fund_id。我试过这样的事情:
$plans = (new 'App\PlanType')->with('planCode.fund')->whereIn('code', ['PENS', 'ANN', 'WEL'])->get();
有了这个,我得到了三个计划代码,它们的关系是急切加载的。我想要的是所有 fund_id 的列表。我尝试了 $plans->lists('planCode.fund.fund_id', 'code')
,但是对于 fund_id,这个 returns 为空。有什么想法吗?
所以如果你的人际关系是这样的-
PlanCode has many Funds
Fund belongs to a PlanCode
PlanType has many PlanCodes
PlanCode belongs to a PlanType
然后你可以像这样添加另一个关系 -
PlanType has many Funds through PlanCodes
更新
将这样的函数添加到您的 PlanType class -
之后public function funds() {
return $this->hasManyThrough('fund', 'planCode', PT, PC);
}
您可以像这样在 PlanType 模型上简单地访问 Funds -
$planType->Funds
查看文档 here。
是的,atefth 合二为一。 Laravel 有一个非常有用的关系,这样你就不必重复查询数据库来获得关系的关系。这就是 hasManyThrough 关系。
所以在这里,例如,您的 planType 模型有很多基金模型到 planCode 模型。您的 planType 模型应包含如下所示的基金方法,其中 PC 是基金 table 中的 planCode->id 列名称,PT 是 planCode table 中的 planType->id 列:
public function funds() {
return $this->hasManyThrough('fund', 'planCode', PT, PC);
}
您可能必须完全命名您的模型,具体取决于您的应用程序的结构。