Laravel 5.6急切加载嵌套关系

时间:2018-05-01 19:58:32

标签: eager-loading laravel-5.6

我的模型关系如下:

Beneficiary has-many FamilyMembers

Earner is-a FamilyMember

用简单的英语,受益人是领导家庭的人。有家庭成员和'其中一些'被视为 Earners ,因为它们为家庭带来了收入。

Beneficiary {id, name}
FamilyMember {beneficiary_id, id, name}

我把它建模为:

Beneficiary hasMany FamilyMember
FamilyMember belongsTo Beneficiary
Earner hasOne FamilyMember <-- but I think this is wrong

我的要求是获取获奖者的名字(获奖者 - &gt;会员 - &gt;名称)。

在我的控制器中,$beneficiary可用(implicit binding)。然后我将家庭成员加载为:

$beneficiary->load(['familyMembers']);

我需要从会员模型中获取Earners列表和Earner的名称。

我无法想出一种正确的建模方法。如果有人可以帮助我如何安排关系,那就太棒了。

1 个答案:

答案 0 :(得分:1)

好的,如果我做对了。

收入者是家庭成员,所以你不能做Earner hasOne FamilyMember

首先,简单来说,模型是数据库表的实现。

由于您没有收入表,因此不需要名为Earner

的模型

我有一个问题需要明确: 受益人是家庭成员,而且收入者也是家庭成员,对吗?

然后在我看来你的表格将是:

  • Families
  • Family_members
  • Beneficiaries

Families表中: 一个家庭只有idname

Family_members表中: family_member将有idnamefamily_idis_earner

Benficiaries表中: 受益人将拥有idfamily_idfamily_member_id

因此,您可以在Beneficiaries表中控制family_idfamily_member_id组合的唯一记录,表示此表仅包含每个家庭的受益人,每个家庭在这张表中只有1条记录。

对于收入者,布尔列is_earner将指示family_member是否为家庭赚钱,这样,每个家庭将允许许多收入者(这是有道理的)

如果您有任何其他问题,或者我的问题出了问题,请告诉我们!