Laravel Отображение контента через активную загрузку (уровень вложенной структуры 3+) с использованием оператора Foreach - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть три модели

  1. Контакты Модель
  2. Модель ролей контактов
  3. Модель проекта

Настройка

  1. контакты могут принадлежать нескольким проектам.(Многие ко многим)
  2. каждый проект имеет свои собственные контактные роли, созданные пользователем.(Один ко многим
    • Роли относятся к конкретным проектам)
  3. В рамках выбранного проекта контакту можно назначить несколько ролей (от многих ко многим).

В настоящее время я создаю свои файлы блэйд-представления и у меня возникла проблема с загрузкой данных с помощью цикла 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);
...