Laravel рекурсивные отношения whereHas на BelongsToMany - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть модель с именем User, которая имеет отношение BelongsToMany и называется lineManagers(). Это отношение возвращает коллекцию User моделей. Характер этой настройки позволяет отношениям типа «родитель-потомок» работать на нескольких уровнях.

BelongsToMany использует таблицу с именем line_manager_user, которая имеет простую схему сопоставления идентификатора пользователя с идентификатором пользователя менеджера линии :

| user_id | line_manager_id |
User A -> lineManagers()-> User B
                           User C -> lineManagers() -> User D

В зависимости от определенных разрешений, я хочу иметь возможность запрашивать эту взаимосвязь на нескольких уровнях для пользователей, у которых есть линейный менеджер с указанным c users.id, потенциально использующий whereHas() но я знаю, что это может сильно ухудшить производительность.

Я пробовал приведенный ниже запрос, но безрезультатно (последний раздел относится к этой части):

$query = User::query()
    ->with('lineManagers')
    ->orderBy('first_name')
    ->orderBy('last_name')
    ->havingEmploymentStatus(UserEmploymentStatus::EMPLOYED)
    ->whereHas('lineManagers.lineManagers.lineManagers', function (Builder $query) {
        $query->where('id', $this->getAuthenticatedUser()->id);
    });

Я специально не хочу 3 уровня, в идеале запрос будет получать lineManagers, пока не будет достигнута пустая коллекция. К сожалению, это должно быть сделано на уровне запросов, а не на уровне сбора

1 Ответ

0 голосов
/ 28 февраля 2020

Если вы сделали это функцией, которая вызывала себя до тех пор, пока она не развернулась до пустой коллекции, вы могли бы сделать это. Не имеет значения, сколько тогда уровней

Проверьте https://www.sitepoint.com/laravel-blade-recursive-partials/

Я бы не советовал делать это в блейд-файле, лучше поработайте над ними " Простой старый PHP "код в функцию

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