2016-08-19 2 views
0

나는 time_diff 방법 내부의 내부 SQL에 대한 확실하지 않다 :이 쿼리를 Laravel Query Builder로 변환하는 방법?

SELECT t1.started_at as chain_break, 
time_to_sec(timediff(t1.started_at,IFNULL(
              (SELECT MAX(t2.ended_at) 
              FROM status_records t2 
              WHERE t2.user_id=189 
              AND t2.started_at< t1.started_at 
             ), t1.started_at 
             ) 
         ) 
       )/3600 AS time_off 
FROM status_records t1 
WHERE t1.user_id=189 
ORDER BY t1.ended_at DESC 
LIMIT 6 

원시 SQL로 DB::query에서이 쿼리를 넣어 제외하고는 그것을 할 수있는 좋은 방법이 있나요?

답변

0

예, selectRaw()을 사용하여 하위 쿼리를 필드 선택 항목으로 추가 할 수 있습니다. 하위 쿼리를 만들려면 다른 쿼리 작성기를 만들 수 있습니다.

+0

가 어떻게'selectRaw'을 사용이 내 쿼리와 동일한 결과를 달성하기 위해 시도? – mvpasarel

0

DB::raw("SELECT t1.started_at as chain_break, 
time_to_sec(timediff(t1.started_at,IFNULL(
              (SELECT MAX(t2.ended_at) 
              FROM status_records t2 
              WHERE t2.user_id=189 
              AND t2.started_at< t1.started_at 
             ), t1.started_at 
             ) 
         ) 
       )/3600 AS time_off 
FROM status_records t1 
WHERE t1.user_id=189 
ORDER BY t1.ended_at DESC 
LIMIT 6"); 
+0

Lol. 고마워하지만 가능한 경우 원시 쿼리를 사용하지 않는 Laravel 스타일에서이를 수행 할 방법을 찾고 있습니다. – mvpasarel

관련 문제