2016-04-21 33 views
0

我需要在Laravel 5.1中創建一個選擇查詢,我不會通過常規SQL創建任何問題,我想知道是否可以幫助我將它寫入Laravel。Laravel使用max和group進行查詢

我創建了這個查詢,獲取所有擁有卡車,拖車和delivery_date等於特定日期(來自$ week_array)的用戶。這是工作,但它缺少一些組件

$RS = $this->instance->user() 
     ->with(['driver.delivery' => function($query) use ($week_array) { 
      $query->where('delivery_date', [Carbon\Carbon::parse($week_array['date'])->toDateTimeString()]); 
      }]) 
     ->with(['driver.trailer', 'driver.truck', 'driver.trailer.trailerType'])->get(); 

我需要排除那些擁有它等於或大於上面的查詢選擇的交貨日期更大MAX交貨日期的驅動程序。這是我需要插入laravel的普通查詢。

換句話說,我需要下面的查詢(簡體)轉換爲Laravel:

SELECT 
    * 
FROM 
    USERS 
     INNER JOIN 
    DRIVERS ON DRIVERS.user_id = USERS.id 
     INNER JOIN 
    DELIVERIES ON DELIVERIES.driver_id = DRIVERS.id 
WHERE 
    1 = 1 
     AND DELIVERIES.driver_id NOT IN (SELECT 
      driver_id 
     FROM 
      DELIVERIES 
     GROUP BY driver_id 
     HAVING MAX(delivery_date) >= '2016-05-10') 
+0

我很害怕我沒有完全理解你的問題。你有選擇MAX值的問題嗎? – Jackowski

+0

我添加了一個簡化的SQL,它正在工作,我試圖將其轉換爲 – Andrew

回答

2

您正在尋找whereHas。嘗試:

$date = Carbon\Carbon::parse($week_array['date'])->toDateTimeString(); 

$RS = $this->instance->user() 
    ->with(['driver.delivery' => function($query) use ($date) { 
     $query->where('delivery_date', [$date]); 
    }]) 
    ->with(['driver.trailer', 'driver.truck', 'driver.trailer.trailerType']) 
    ->whereHas('driver.delivery', function($query) use ($date) { 
     return $query->where('delivery_date', '>', $date); 
    }, '=', 0) 
    ->get(); 

也可以嘗試驗證查詢期待權與->toSql()更換->get()和使用dd助手功能。

+0

好像你正在返回last_delivery日期,我需要確保driver_id不在最大列表中(deliveries.delivery_date)> = $ date – Andrew

+0

另外,得到這個錯誤:'未找到列:'字段列表'中的1054未知列'max(delivery_date)' – Andrew

+0

您是否可以複製並粘貼生成的SQL? – Scopey