使用2个连接表中的datediff

时间:2016-12-09 15:37:43

标签: php sql laravel date

我想在两张桌子上找出两个日期之间的差异。 uploads.published_at与completed_guides.created_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();

2 个答案:

答案 0 :(得分:0)

您可以像这样使用Laravel Query Builder的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"));
  

详细了解SQL Date Format

希望这有帮助!

答案 1 :(得分:0)

有单位的人是timestampdiff,而不是约会。

dd($user->with('locations')->toSql());