2016-10-20 14 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はまだユーザーテーブルのIDです。 family_nameとそのクエリのプロモーターの名前も追加したいと思います。

OWNテーブル内でサブクエリを作成するにはどうすればよいですか?

答えて

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'); 
} 

が今すぐあなたがそうで$user->promoter->name, $user->promoter->family_nameによりプロモーターの詳細にアクセスすることができ、コントローラ

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

にクエリを書き換え定義します。

また、あなたは感謝を、あまりにもCountryために同じことを行う国の関係を定義する代わりにして、Userモデルに参加し、その後User::with('promoter', 'country')->...

+0

ことができます。私の問題は、datatablesプラグインのクエリのためにこれが必要なのです。したがって、クエリ – derdida

+0

でOKを実行する必要があります。とった。あなたはこれで試してみることができます= '$ユーザーのユーザーを::( '国'、 'countries.id'、 '='、 'users.country_id')に参加 \t \t \t \t - > leftJoin( 'ユーザー(プロモータ、 'promoters.id'、 '='、 'users.promoter_id') - > select(['users.id'、 'users.promoter_id'、 'users.family_name'、 'ユーザーを選択してください。名」、 'promoter_family_nameとしてpromoters.family_name'、 \t \t 'promoter_name'、 としてpromoters.name ... ' チェックし、更新の答え。働いている –

+0

感謝。 – derdida

関連する問題