Laravel получает пользователей, которые не входят в команду

#php #sql #laravel #eloquent #relationship

#php #sql #laravel #красноречивый #отношения

Вопрос:

У меня есть таблица users и таблица salesTeams.

пользователь может быть лидером только в одной команде продаж. в команде продаж может быть только один лидер.

в группах продаж у меня есть leader_id (users.id ). в таблице users у меня также есть столбец role_id (идентификатор роли 3 для лидера) В модели users у меня есть функция

 public function salesTeam(){
    return $this->hasOne('AppModelsSalesTeam', 'leader_id');
}
  

чтобы получить команду пользователей, если таковая имеется.

В модели пользовательских ролей у меня есть функция

 public function scopeOnlyLeaders($query) {

        $query->where('id', 3)->with('users');

        return $query;
    }
  

чтобы получить всех пользователей, у которых есть идентификатор роли, соответствующий лидерам

Мне нужна функция, которая извлекает всех лидеров, которые в данный момент не назначены команде. Прямо сейчас моим единственным решением является raw sql, но я уверен, что я что-то упустил из виду в документации eloquent

Ответ №1:

Попробуйте так:

 public function scopeOnlyLeaders($query) {

    $query->with(['users' => function ($query) {
        $query->select('users.*')
        $query->leftJoin('salesteam', 'salesteam.id', '=', 'users.leader_id')
            ->whereNull('leader_id');
    }]);

    return $query;
}
  

Комментарии:

1. это делает то же самое. Я хочу, чтобы пользователи, которые в настоящее время не назначены ни одной команде. Итак, те, чей идентификатор отсутствует в столбце leader_id в таблице salesteams