Laravel 5.6 нетерпеливо загружает вложенные отношения - PullRequest
0 голосов
/ 01 мая 2018

Мои модельные отношения следующие:

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-> Member-> name).

В моем контроллере доступно $beneficiary (implicit binding). Затем я загружаю членов семьи как:

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

Мне нужно получить список Заработных плат и имя Earner от модели Member.

Я не мог придумать правильный способ моделирования этого. Если кто-то может мне помочь, как мне организовать отношения, это было бы здорово.

1 Ответ

0 голосов
/ 02 мая 2018

Хорошо, так что, если я правильно понял.

Наемный работник является членом семьи, поэтому вы не можете сделать это. У Находящего есть один член семьи

Прежде всего, простыми словами, модель - это реализация таблицы базы данных.

Поскольку у вас нет таблицы получателей, вам не нужна модель с именем Earner

У меня есть один вопрос, чтобы прояснить: Бенефициар - это член семьи, а кормилец тоже является членом семьи, верно?

Тогда, по моему мнению, ваши таблицы будут:

  • Families
  • Family_members
  • Beneficiaries

В Families таблица: Семья просто будет иметь id и name

В Family_members таблица: У члена семьи будет id, name, family_id, is_earner

В Benficiaries таблица: Получатель получит id, family_id, family_member_id

Таким образом, сказав, что вы можете контролировать, что в таблице Beneficiaries должны быть уникальные записи для family_id и family_member_id вместе, это означает, что эта таблица будет содержать только бенефициара каждой семьи, и каждая семья должна иметь только 1 запись в этой таблице.

Для тех, кто зарабатывает, в логическом столбце is_earner будет указано, зарабатывает ли family_member семья или нет, при этом в каждой семье будет много заработков (что имеет смысл)

Дайте мне знать, если у вас есть дополнительные вопросы или я что-то не так понял в вашем вопросе!

...