Laravel, найдите идентификаторы, используя запрос, где эти идентификаторы находятся в другой таблице - PullRequest
2 голосов
/ 13 января 2020

У меня есть две таблицы, school_users и users. Мне нужно создать запрос с использованием Eloquent , который получает всех пользователей, где user_id равно school_id. поэтому в результате должно быть несколько пользователей, поэтому мне также нужно сгруппировать результат по school_id

спасибо в davance

Отношения: Модель пользователя:

public function school()
{
    return $this->hasMany(SchoolUser::class);
}

Модель SchoolUser:

public function user()
{
    return $this->hasMany(User::class);
}

School_users таблица:

+----+---------+------------+-------------+
| id | user_id |  school_id | created_at  |
+----+---------+------------+-------------+
|  1 |   79    |    79      | <SOME TIME> |
|  2 |   85    |    79      | <SOME TIME> |
|  3 |   86    |    85      | <SOME TIME> |
|  4 |   87    |    85      | <SOME TIME> |
+----+---------+------------+-------------+

users таблица:

+----+
| id | 
+----+-
|  79 | 
|  85 |
|  86 |
|  87 |    
+----+-

Модель пользователя:

public function getUsers()
{
    return $this
        ->leftJoin('school_users', $this->table . '.id', '=', 'school_users.school_id')
        ->select(
            $this->table . '.*',
            'school_users.school_id as school_id'
        )
        ->whereIn('users.id', '=', 'school_users.school_id')
        ->orderBy('id', 'desc')
        ->get();
}

1 Ответ

0 голосов
/ 13 января 2020

Используйте whereColumn для фильтрации user_id, равной school_id,

и используйте join вместо leftjoin:

public function getUsers()
{
    return $this
    ->join('school_users', function($join) {
        $join->on('school_users.user_id', '=', $this->table.'.id')
             ->whereColumn('school_users.user_id', 'school_users.school_id');
    })
    ->select
        (

            $this->table.'.*',
            'school_users.school_id as school_id'
        ) 
    ->orderBy($this->table.'.id','desc')
    ->get();   
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...