2016-12-09 59 views
0

我想在兩個表格中找出兩個日期之間的差異。相比completed_guides.created_at從2個連接表中使用datediff

的uploads.published_at我不斷收到這說的錯誤:

SQLSTATE[42000]: Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'datediff' (SQL: select users.*,completed_guides.created_at as completed_at,uploads.published_at,datediff(HOUR, published_at, completed_at) from `users` inner join `uploads` on `users`.`id` = `uploads`.`user_id` inner join `completed_guides` on `uploads`.`id` = `completed_guides`.`upload_id` where `completed_guides`.`upload_id` = 2839 limit 10) 

這裏是我的代碼。任何幫助,將不勝感激。

$select = [ 
    'users.*', 
    'completed_guides.created_at as completed_at', 
    'uploads.published_at', 
    'datediff(HOUR, published_at, completed_at) as date_diff' 
]; 

return User::select(DB::raw(join(',', $select))) 
    ->join('uploads', 'users.id', '=', 'uploads.user_id') 
    ->join('completed_guides', 'uploads.id', '=', 'completed_guides.upload_id') 
    ->where('completed_guides.upload_id', $this->id) 
    ->take(10) 
    ->get(); 

回答

0

您可以使用Laravel查詢生成器的whereRaw()這樣的:

return User::select(DB::raw(join(',', $select))) 
      ->join('uploads', 'users.id', '=', 'uploads.user_id') 
      ->join('completed_guides', 'uploads.id', '=', 'completed_guides.upload_id') 
      ->where('completed_guides.upload_id', $this->id) 
      ->whereRaw('datediff(uploads.published_at, completed_guides.completed_at) as date_diff') 
      ->take(10) 
      ->get(); 

設置日期,您可以使用SQL方法的格式 - date_format(date, format)這樣的:

->select(DB::raw("DATE_FORMAT(date_diff, '%b %d %Y %h:%i %p') as formatted_date_diff")); 

見更多about SQL Date Format

希望這有助於!

+0

管理得到它的工作,需要刪除'HOUR'參數。現在它在0天的差異中返回0,是否有可能以'Y-m-d H:i'格式返回? – Ben

+0

您可以使用'DATE_FORMAT(date,format)'sql方法,試試這個。我從我的答案中刪除了'HOUR'參數! –

+0

@BenShepherd - 我已經更新了我的答案,請看看! –

0

帶單位的那個,是timestampdiff,不是日期。

timestampdiff(HOUR, published_at, completed_at) as date_diff