2016-10-20 40 views
0

我有以下查詢:Laravel與自己的表子選擇?

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

現在重寫控制器

$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

謝謝。我的問題是,生病需要這個查詢數據表插件。所以應該用查詢 – derdida

+0

確定。得到它了。你可以給一個嘗試這樣的: '$用戶=用戶::加入( '國家', 'countries.id', '=', 'users.country_id') \t \t \t \t - > leftJoin(「用戶作爲發起人','promoters.id','=','users.promoter_id') - > select([ 'users.id', 'users.promoter_id', 'users.family_name', 'users。名稱」, 'promoters.family_name爲promoter_family_name', \t \t 'promoters.name爲promoter_name', ...' 檢查更新的答案。 –

+0

感謝那些正在工作。 – derdida