Мои модельные отношения следующие:
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
Мое требование - получить имя Заработника (Зарабатывающий-> Член-> имя).
В моем контроллере доступен $beneficiary
(implicit binding
). Затем я загружаю членов семьи как:
$beneficiary->load(['familyMembers']);
Мне нужно получить список зарабатывающих и имя зарабатывающего из модели Участника.
Я не мог придумать правильный способ смоделировать это. Если бы кто-то мог мне помочь, как мне наладить отношения, это было бы здорово.
Хорошо, если я правильно понял.
Работающий - член семьи, поэтому у Earner hasOne FamilyMember не получится.
Прежде всего, проще говоря, модель - это реализация таблицы базы данных.
Поскольку у вас нет таблицы для заработков, модель под названием 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
деньги семье или нет, при этом это позволит много заработать на семью (что имеет смысл).
Дайте мне знать, если у вас возникнут дополнительные вопросы или я ошибся в вашем вопросе!
Да, лучше оставить отметку в таблице участников, чтобы указать, является ли он Заработчиком. Я только что объяснил один сценарий, и у меня есть еще 3 случая с той же функциональностью, так что я могу сделать то же самое и там. Поднимите вверх для вашего руководства (Y)