У меня есть три модели
- Контакты Модель
- Модель ролей контактов
- Модель проекта
Настройка
- контакты могут принадлежать нескольким проектам.(Многие ко многим)
- каждый проект имеет свои собственные контактные роли, созданные пользователем.(Один ко многим
- Роли относятся к конкретным проектам)
- В рамках выбранного проекта контакту можно назначить несколько ролей (от многих ко многим).
В настоящее время я создаю свои файлы блэйд-представления и у меня возникла проблема с загрузкой данных с помощью цикла foreach и оператора if.
Вопрос 1:
@foreach ($project->contacts as $contact)
@foreach ($contact->contactrole as $role)
@if ($role->group == 'owner')
<li> {{$contact->firstname}} - {{$role->label}} </li>
@endif
@endforeach
@endforeach
У меня есть группы ролей, которые предопределены моим приложением, пользователь выбирает его при создании новой роли.Я отображаю все «контакты» с заданными ролями на одной странице, но разделены по категориям, как указано выше.Я могу сделать это с помощью приведенного выше кода в моем файле просмотра.Иногда проблема заключается в том, что этот «контактный» человек может иметь несколько ролей в другой категории ролей, так как я перебираю их роли, просмотр файла повторяет вывод столько же, сколько и их ролей.(5 разных ролей дают мне 5 повторов одной и той же роли, 5x5 = 25 на одной странице).
Как я могу изменить свой код, чтобы отображать несколько ролей этого контакта на одной странице без повторов?
Вопрос 2: Я думал о переносе оператора if за пределы оператора foreach, например, @if ($project->contacts->contactrole->group == 'owner')
, он не работает, он говорит, что контактная роль не существует.
Вопрос 3: Кажется, я буду отображать больше вложенных данных?Каков был бы простой / правильный способ отображения и возможности выполнения, если утверждения о состоянии данных?
Как получить данные в контроллере
$project = Project::with('contacts.contactrole','companies.companyrole')->findOrFail($projectid);