Вопросы по дизайну Laravel Many to Many (модели 3 и 3+) - PullRequest
0 голосов
/ 02 декабря 2018

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

Контакты Модель

Роли контактов Модель

Модель проекта

Настройка;

контакты могут принадлежать нескольким проектам.(Многие ко многим)

каждый проект имеет свои собственные контактные роли, созданные пользователем.(От одного ко многим - роли специфичны для проектов)

В рамках выбранного проекта контакт может быть назначен нескольким ролям (от многих ко многим)

Сложная часть: у меня есть категории для модели ролей,когда пользователь создает роль, он выбирает категорию для этой роли из выпадающего списка (из БД, всего 7 предопределенных категорий).

Тогда, что я пытаюсь сделать, и у меня возникают проблемы с пониманием;

1. Каков наилучший способ отобразить все контакты с заданными ролями в этом конкретном проекте?

Я могу легко получить $project->contacts() //this gives me all contacts within that project, но мне нужно сделать еще один шаг, где я могу получить контакты с ихроли.

2. Кроме того, как бы я отобразил все контакты, которые являются частью этой выбранной категории для этого проекта?

3. Должен ли я использовать другое соединение между моими моделями, отличное от многих ко многим, вроде уже через много?

1 Ответ

0 голосов
/ 02 декабря 2018

Предположение - с

дисплеем

вы на самом деле имеете в виду получить с красноречивым.

Слово совета - ПРОЧИТАЙТЕ ДОКУМЕНТЫ!Laravel имеет отличную и простую для понимания документацию.

https://laravel.com/docs/5.7/eloquent-relationships#eager-loading

1) Я легко могу получить $ project-> contacts () // это дает мне все контакты в этом проекте, ноМне нужно сделать еще один шаг, чтобы я мог получить контакты с их ролями.

Вложенная нетерпеливая загрузка:

$project = Project::with('contacts.roles')->find($id);

2) Кроме того, как бы я отобразил всеконтакты, которые являются частью этой выбранной категории для этого проекта?

Ограничение активных нагрузок и наличие отношений запроса:

$project = Project::with(['contacts', function($q) use ($categoryId) {
    $q->with('roles')->whereHas(['category' => function($q2) use ($categoryId) {
        $q2->whereId($categoryId);
    });
}]);

3. Должен ли я использовать другое соединениемежду моими моделями, кроме многих ко многим, например, имеет много через?

Структура выглядит хорошо для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...