我有两个表格request
和status_tracker
。request
表格有request_id,approver_id ,status_id
个字段,status_tracker
个字段有request_id,status_before,changed_by,status_after
个字段。每个请求都会被审核并且状态更改为17 / 20.我想获取asset_request表中已审核(status = 17)和approver_id = 1866的记录,并在status_tracker表中获取changed_by
'1877'的记录。
我想获取记录001(status.tracker.changed_by ='1866'), 002(approver_id = 1866和status_tracker.status_after ='17'), 004((status.tracker.changed_by = '1866'))。
request table
request_id approver_id status_id requestor
001 11 18 301
002 1866 17 113
003 115 17 159
004 112 19 163
005 1866 1 172
006 1866 20 172
status_tracker
request_id status_before status_after changed_by
001 null 1 301
001 1 17 1687
001 17 8 1724
001 8 18 1866
002 null 2 113
002 2 17 1687
003 null 1 159
003 1 17 1687
004 null 1 163
004 1 17 1687
004 17 8 1724
004 8 19 1866
005 null 1 172
006 null 1 172
006 1 20 1687
我试过
$users = DB::table('asset_status_tracker')
->leftJoin('asset_request', 'asset_status_tracker.request_id', '=','asset_request.request_id')
->where('asset_status_tracker.status_before','!=',null)
->orwhere('asset_status_tracker.changed_by','=',$approver_id)
->orwhere('asset_request.approver_id','=',$approver_id)
->where('asset_status_tracker.status_after','=','17')->get();
现在我得到所有评论记录001,002,003,004,005。我做了什么?
答案 0 :(得分:0)
使用此:
$users = DB::table('asset_status_tracker')
->leftJoin('asset_request', 'asset_status_tracker.request_id', '=','asset_request.request_id')
->where('asset_status_tracker.status_before','!=',null)
->orwhere(function($query) use ($approver_id) {$query->where('asset_status_tracker.changed_by','=',$approver_id)
->where('asset_request.approver_id','=',$approver_id);})
->where('asset_status_tracker.status_after','=','17')->get();
答案 1 :(得分:0)
将两个Orwhere放在一个功能中
->orwhere(function($subQ) use ($approver_id) {
$subQ->where('asset_status_tracker.changed_by','=',$approver_id)
->orwhere('asset_request.approver_id','=',$approver_id);
});
答案 2 :(得分:0)
你可以试试这个:
$users = DB::table('asset_status_tracker')
->leftjoin('asset_request',function($join)
{
$join->on('asset_status_tracker.request_id', '=','asset_request.request_id')
->where('asset_request.approver_id','=',$approver_id)
->where('asset_status_tracker.status_after','=','17');
})
->where('asset_status_tracker.status_before','!=',null)
->orwhere('asset_status_tracker.changed_by','=',$approver_id)->get();