我在网上发现了几个与我类似的问题,但似乎找不到有效的答案。
我有两张table
用户
ID | FIRSTNAME | EMAIL_ADDRESS
1 | Joe Bloggs | Joe@bloggs.com
地位
ID | USER_ID | STATUS | DATE
1 | 1 | 'In' | 2018-06-04 09:01:00
2 | 1 | 'Out' | 2018-06-04 09:00:00
我需要能够连接在一起的2个表,但只有得到最近的状态列 date
,就像这样
ID | FIRSTNAME | EMAIL_ADDRESS | STATUS_ID | STATUS | DATE
1 | Joe Bloggs | Joe@bloggs.com | 1 | 'In' | 2018-06-04 09:01:00
我需要能够运行额外的查询生成器参数,如 where
,因为用户能够根据需要传入筛选器和搜索参数,所以为了能够使用查询生成器中的状态表列,我正在执行这样的联接
$users = Users::join('status', 'status.user_id', '=', 'user.id')->distinct('user.id');
如果我需要的话,它允许我传入任何搜索参数
if(!empty($request->search)){
$param = $request->search;
$users = $users->where(function($query) use ($param){
$query->where('users.firstname', 'like', '%'.$param.'%')
->orWhere('users.email_address', 'like', '%'.$param.'%');
});
}
if(!empty($request->dateFrom)){
if(!empty($request->dateTo)){
$users = $users->whereRaw('DATE(status.date) BETWEEN ? AND ?', [$request->dateFrom, $request->dateTo]);
} else {
$users = $users->whereRaw('DATE(status.date) BETWEEN ? AND DATE(NOW())', [$request->dateFrom]);
}
}
然后跑我的车 get()
最后
if($method == 'paginate'){
$users = $users->paginate(10);
} else {
$users = $users->get();
}
这将返回以下内容
ID | FIRSTNAME | EMAIL_ADDRESS | STATUS_ID | STATUS | DATE
1 | Joe Bloggs | Joe@bloggs.com | 1 | 'In' | 2018-06-04 09:01:00
2 | Joe Bloggs | Joe@bloggs.com | 1 | 'Out' | 2018-06-04 09:00:00
我需要能够使用外部表列作为我的 Where
函数,但我只需要为每个用户返回一行。如何运行联接,但仅为每个用户返回一行?
2条答案
按热度按时间n53p2ov01#
因为您使用的是laravel,所以让我们让解决方案更易于理解和使用:首先让我们为每个表创建模型:
现在让我们创建状态模型:
现在你可以用这样的口才:
希望有帮助!
jw5wzhpr2#
要获取每个用户的最新记录,可以使用状态表的自联接
使用查询生成器,您可以将其重写为
laravel eloquent选择所有创建了max的行
获取每个uid类型的最后一个条目
拉威尔雄辩组最近的记录