Laravel 5.6 急切加载嵌套关系

Laravel 5.6 eager loading nested relationships

我的模型关系如下:

Beneficiary has-many FamilyMembers

Earner is-a FamilyMember

用简单的英语来说,受益人就是一家之主。有家庭成员,'some of them'被视为收入者,因为他们为家庭带来了收入。

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

我将其建模为:

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

我的要求是获取Earner的名字(Earner->Member->name)。

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

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

我需要从会员模型中获取收入者列表和收入者姓名。

我想不出正确的建模方法。如果有人能帮我怎么安排关系就好了。

好的,如果我没猜错的话。

收入者是家庭成员,所以你不能做收入者有一个家庭成员

首先,简单来说,一个模型就是一个数据库的实现table。

既然你没有收入者table,那么就不需要一个叫做Earner

的模型

我有一个问题想弄清楚: 受益人是家庭成员,收入者也是家庭成员,对吗?

那么在我看来你的 table 将是:

  • Families
  • Family_members
  • Beneficiaries

Familiestable中: 一个家庭将只有一个 id 和一个 name

Family_memberstable中: family_member 将有 idnamefamily_idis_earner

Benficiariestable中: 受益人将有 idfamily_idfamily_member_id

因此,您可以控制在 Beneficiaries table 中应该有 family_idfamily_member_id 组合的唯一记录,这意味着此 table将只保留每个家庭的受益人,每个家庭在table.

中应该只有1条记录

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

如果您还有其他问题或者我的问题有误,请告诉我!