2016-08-11 80 views
0

我有另一個名爲tableb的表,它具有通過user_id字段定義的用戶關係。Laravel雄辯的查詢從另一個模型獲取用戶

我想運行一個針對tableb的查詢,其中某個日期在一定範圍內,但是我想抓取與該行相關聯的用戶表,但我只希望它抓住用戶,如果它尚未被抓取。我試圖在1個數據庫查詢中完成這一切。我已經完成了大部分工作,但是我遇到了獨特的部分問題。

這就是我現在所擁有的:

$tableB = TableB::select('users.*') 
    ->join('users', 'tableb.user_id', '=', 'users.id') 
    ->where('tableb.start_date', '>', date('Y-m-d')) 
    ->get(); 

所以現在我有TableB中3項來自同一用戶,最好我想只得到該用戶1項。

我該怎麼做呢?

+0

添加'GROUPBY( 'users.id')'。 :) –

+0

你會介意在示例數據的sqlfiddle.com上添加一個示例,也請添加您的模型文件。 – motto

回答

3

既然你只選擇用戶數據,只是在你的查詢添加一個groupBy條款。

$tableB = TableB::select('users.*') 
    ->join('users', 'tableb.user_id', '=', 'users.id') 
    ->where('tableb.start_date', '>', date('Y-m-d')) 
    ->groupBy('users.id') 
    ->get(); 
1

你應該只添加groupBy這樣的:

$tableB = TableB::select('users.*') 
    ->join('users', 'tableb.user_id', '=', 'users.id') 
    ->where('tableb.start_date', '>', date('Y-m-d')) 
    ->groupBy('users.id') 
    ->get 
0

試試這個代碼

App/user.php 

public function getrelation(){  
     return $this->hasMany('App\tableB', 'user_id'); 
} 

在控制器

Controller.php 

use App/user; 

public funtion filterByDate(user $user) 
{ 
    $date = '2016-02-01'; 
    $result = $user->WhereHas('getrelation', function ($query) use($date) { 
            $query->whereDate('tableb.start_date', '>', $date) 
              ->first(); 
         });  
}