Отфильтруйте одну запись в таблице с помощью идентификатора запроса - PullRequest
0 голосов
/ 25 мая 2019

У меня есть таблица request_process следующим образом:

requestID Status
1            0
1            1
1            2
2            0
2            1

Я хочу получить по одной строке на запрос с максимальным статусом, но только те строки, чей статус для запроса не равен 2

Iхотите применить это к предложению where

$UserRequests = UserRequests::leftJoin('request_process', function($join){
$join->on('user_requests.id', '=', 'request_id')->where('status', '!=',2);})
->select('*')   
->get();

Ответы [ 2 ]

0 голосов
/ 26 мая 2019
  • Мы фильтруем все строки, которые не имеют этого максимального статуса, и делаем group by для request_process.requestID и используем статистическую функцию max() для получения максимального статуса для каждого процесса запроса пользователя.

SQL:

<?php

$max_status = 2; // hard coded but you need more tables to make this more flexible.

$UserRequests =  UserRequests::leftJoin('request_process','user_requests.id','=','request_process.request_id')
                    ->select('user_requests.*',DB::raw('max(request_process.status) as status'))
                    ->where('request_process.status','!=',$max_status)
                    ->groupBy('request_process.requestID')
                    ->get();

dd($UserRequests);
0 голосов
/ 25 мая 2019

попробуйте это

$UserRequests = UserRequests::leftJoin('request_process','request_process.request_id','=','user_requests.id')
   ->where('request_process.status', '!=',2)
   ->select('*')
   ->get();
...