【问题标题】:Laravel 5.6 eager loading nested relationshipsLaravel 5.6 急切加载嵌套关系
【发布时间】:2018-05-01 19:58:32
【问题描述】:

我的模型关系如下:

Beneficiary has-many FamilyMembers

Earner is-a FamilyMember

用简单的英语来说,受益人是一家之主。有家庭成员,“其中一些人”被视为收入者,因为他们为家庭带来了收入。

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']);

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

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

【问题讨论】:

    标签: eager-loading laravel-5.6


    【解决方案1】:

    好吧,如果我猜对了。

    Earner hasOne FamilyMember

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

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

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

    那么在我看来,您的表格将是:

    • Families
    • Family_members
    • Beneficiaries

    Families 表中: 一个家庭只有一个id 和一个name

    Family_members 表中: 家庭成员将拥有idnamefamily_idis_earner

    Benficiaries 表中: 受益人将拥有idfamily_idfamily_member_id

    话虽如此,您可以控制Beneficiaries 表中的family_idfamily_member_id 组合应该有唯一记录,这意味着该表将仅保存每个家庭的受益人,并且每个家庭应该只有此表中有 1 条记录。

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

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

    【讨论】:

    • 是的,在成员表中保留一个标志以表明他是否是收入者是要走的路。我只是解释了一个场景,我还有另外 3 个案例具有相同的功能,这样我也可以在那里做同样的事情。为您的指导竖起大拇指(Y)
    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2017-09-30
    • 2015-08-16
    • 1970-01-01
    • 2017-03-01
    • 2012-12-11
    相关资源
    最近更新 更多