Я пытаюсь использовать промежуточную таблицу для обозначения отношений между спонсорскими двумя разными таблицами пользователей (Employee & Non-Employee) со следующими требованиями:Полиморфные отношения с несколькими ассоциациями
- Спонсором может быть либо Сотрудник или не-сотрудник.
- Сотрудник/не-сотрудник может принадлежать только одному спонсору.
- Сотрудник может иметь много спонсоров.
Я заметил, что Полиморфные отношения для Laravel поддерживают только отдельные ассоциации. Обычно они используют промежуточную таблицу в отношении, чтобы не создавать несколько таблиц с одной и той же сигнатурой. В моем случае мне нужно полиморфно с обеих сторон отношений, так как в любой момент, когда я мог бы спонсировать/спонсировать человека, принадлежал к любой из этих таблиц. Я не уверен, что я собираюсь сделать это правильно, вроде бы в тупике.
Вот что я в настоящее время:
Employees
id
sponsor_id
NonEmployees
id
sponsor_id
Sponsors
id
sponsorable_id
sponsorable_type
Далее я настройки следующих моделей:
Модель/Employee.php
public function sponsors() {
return $this->morphMany('Sponsor', 'sponsorable');
}
Модель/NonEmployee.php
public function sponsors() {
return $this->morphMany('Sponsor', 'sponsorable');
}
Модели/Спонсор. PHP
public function sponsorable() {
return $this->morphTo();
}
С помощью этой установки, я был в состоянии выполнять общие запросы подстановок к таблице спонсоров, а затем перепроектировать их, чтобы получить имя спонсора.
Sponsor::with('sponsorable')->get();
Sponsor::find(1)->sponsorable;
То, что вы описали в отношениях между «спонсором» и «сотрудников» выглядит как «древовидная» структура. Это верно? т. е. один сотрудник может быть «спонсором», а также «спонсироваться» другим сотрудником? –
Да, это правильно. То же самое касается «не-сотрудников». По этому конкретному вопросу между ними мало различий, за исключением того, что они находятся в разных таблицах с разными схемами. Есть предположения? – Jeremy
У вас есть логика для обеспечения соблюдения ваших правил? Я думаю о терминах «циклов» в «отношениях». Больше как «ориентированные графики». Что произойдет при обработке, если произойдет «цикл»? –