Laravel 5.2 Eloquent - 通过多种关系查找所有id

时间:2016-04-11 19:12:23

标签: php laravel eloquent laravel-collection

所以这是我的关系:

基金属于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返回null。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

所以如果你的关系是这样的话 -

  

PlanCode 有很多 基金

     

基金 属于 PlanCode

     

PlanType 有很多 PlanCodes

     

PlanCode 属于 PlanType

然后你可以添加另一个这样的关系 -

  

PlanType 有多个 基金 PlanCodes

<强>更新

将此类函数添加到 PlanType 类 -

之后
public function funds() {
    return $this->hasManyThrough('fund', 'planCode', PT, PC);
}

您可以像这样访问 PlanType 模型中的基金 -

$planType->Funds

查看文档here

答案 1 :(得分:1)

是的,atefth将其合二为一。 Laravel有一个非常有用的关系,因此您不必重复查询数据库以获得关系关系。这是hasManyThrough关系。

所以在这里,例如,您的planType模型有许多基金模型通过 planCode模型。您的planType模型应该包含一个看起来像这样的基金方法,其中PC是基金表中的planCode-&gt; id列名,PT是planCode表中的planType-&gt; id列:

public function funds() {
    return $this->hasManyThrough('fund', 'planCode', PT, PC);
}

您可能必须完全命名模型,具体取决于应用程序的结构。