2016-10-20 6 views
0

У меня есть следующий запрос:Laravel Subselect со своим столиком?

$users = User::join('countries', 'countries.id', '=', 'users.country_id')->select([ 
     'users.id', 
     'users.promoter_id', 
     'users.family_name', 
     'users.name', 
     ... 

users.promoter_id по-прежнему идентификатор из таблицы пользователей. Я хочу добавить имя семейства и имя для промоутера в этом запросе.

Как я могу сделать этот подзапрос внутри моей СОБСТВЕННОЙ таблицы?

ответ

3

Самостоятельный сценарий. Вы можете сделать это, создав псевдоним своего стола Users, а затем присоединитесь к Users.

$users = User::join('countries', 'countries.id', '=', 'users.country_id') 
       ->leftJoin('users as promoters', 'promoters.id', '=', 'users.promoter_id')->select([ 
     'users.id', 
     'users.promoter_id', 
     'users.family_name', 
     'users.name', 
     'promoters.family_name as promoter_family_name', 
     'promoters.name as promoter_name', 
     ... 

Другой способ, в вашей User модели определить отношение

public function promoter() 
{ 
    return $this->belongsTo(User::class, 'promoter_id', 'id'); 
} 

Теперь перепишем запрос в контроллер

$users = User::with('promoter')->join('countries', 'countries.id', '=', 'users.country_id')->select([ 
     ... 

Теперь вы можете получить доступ к детали промоторов по $user->promoter->name, $user->promoter->family_name и так далее.

Также вы можете сделать то же самое для Country тоже, определяя отношения страны вместо того, чтобы присоединиться к вашей User модели, а затем User::with('promoter', 'country')->...

+0

Спасибо. Моя проблема в том, что это нужно для запроса плагина datatables. Так что это должно быть сделано с запросом – derdida

+0

OK. Понял. Можете ли вы дать попробовать с этим: '$ пользователей = User :: присоединиться ('страны', 'countries.id', '=', 'users.country_id') \t \t \t \t -> LeftJoin ('пользователей в качестве промоутеров ',' promoters.id ',' = ',' users.promoter_id ') -> выберите ([ ' users.id ', ' users.promoter_id ', ' users.family_name ', ' пользователей. название», 'promoters.family_name в promoter_family_name', \t \t 'promoters.name, как promoter_name', ...' Проверьте обновленный ответ. –

+0

Спасибо, что работает. – derdida

Смежные вопросы