выделить строки в запросе laravel - PullRequest
0 голосов
/ 24 мая 2018

У меня есть две таблицы request и status_tracker. request таблица содержит request_id,approver_id ,status_id поля, а status_tracker имеет request_id,status_before,changed_by,status_after поля. Каждый запрос проверяется, и статус изменяется на 17 / 20. Я хочуИзвлеките проверенную запись (status = 17) и Approver_id = 1866 в таблице asset_request и выберите запись changed_by '1877' в таблице status_tracker.

Я хочу получить записи 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.Что я сделал, работая

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Поместите оба Orwhere в одну функцию

->orwhere(function($subQ) use ($approver_id) {
    $subQ->where('asset_status_tracker.changed_by','=',$approver_id)
    ->orwhere('asset_request.approver_id','=',$approver_id);
});
0 голосов
/ 24 мая 2018

Вы можете попробовать это:

$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();
0 голосов
/ 24 мая 2018

Используйте это:

$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...