#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