2016-08-11 58 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(); 
         });  
}