Есть сотрудники и транзакции и 3 разных отдела город, отдел кадров, колл-центр
У сотрудников в таблице есть related_id и related_type, для полиморфной связи с любыми из отделов
Некоторые сотрудники должны быть привязаны к колл-центру, но иметь возможность переключаться между городами
Админ будет иметь возможность переключаться в любой из доступных разделов
Как лучше реализовать это переключение? Чтобы сотрудник принадлежал тому отделу, в котором был изначально создан и имел доступ к другим
То есть в разделах сотрудников и транзакций должны отображаться разные записи в зависимости от выбранного отдела
Использую laravel, spatie/laravel menu, spatie/laravel permissions, кто имел подобный опыт, прошу отписаться
Не пойму, зачем тут полиморфная связь если сотрудники всегда привязываются только к отделам? А так много чего не понятно, в том числе что такое "переключаться". Опишите ваш вопрос более понятно, чтобы человек, который впервые его видит, понял суть.
Судя по всему Вам ни к чему полиморфная связь, ведь уже есть отдел => сотрудник, этого достаточно. Тип (или уникальность отдела) принадлежат самому отделу. Если сотрудник может быть дополнительно связан с другими отделами, то связь можно вынести в отдельную таблицу department_employee: department_id, employee_id, которая сможет хранить несколько связей. Если некий отдел является первичным, то в эту таблицу может быть добавлено поле, с ограничением unique department_employee: employee_id, is_primary (при возможности null), ну или в таблице employee — primary_department_id.
Тут может быть много вариантов. Например, может быть смысл в том, чтобы выделить общую сущность отделов в одну таблицу, а их различия подгружать по необходимости: department, department_type_a, department_type_b, хотя возможно все уляжется в одну таблицу или будет реализовано в виде NoSQL-полей (уже широко поддерживаемый JSON, например). Получится, что сотрудники относятся к отделам вообще, но несколько усложнит работу с отделами. И даже при наличии разных сущностей отделов Вы можете реализовать связь с ними третьей таблицей, department_employee, перенеся тип и флаг первичности туда.