【问题标题】:How to Use 'DATEADD' function in Laravel join?如何在 Laravel 连接中使用“DATEADD”功能?
【发布时间】:2016-03-08 03:09:06
【问题描述】:

我有一个 Laravel 4 加入,如下所示:

return DB::table(Location::getTableName() . ' as l')->where('l.company_id', $companyId)
        ->join(User::getTableName() . ' as u', 'u.location_id', '=', 'l.id')->whereIn('l.id', $locationsId)
        ->join(UserTimeline::getTableName() . ' as ut', 'ut.user_id', '=', 'u.id')
        ->join(Status::getTableName() . ' as s', 's.id', '=', 'ut.status_id')
        ->select(
            'l.name as location_name',
            'u.first_name as user_first_name',
            'u.last_name as user_last_name',
            'u.email as user_email',
            'ut.started_at as timeline_started_at',
            'ut.finished_at as timeline_finished_at',
            's.id as status_id',
            's.label as status_label'
        )
        ->orderBy('ut.id', 'asc')
        ->skip($from)
        ->limit($limit)
        ->get();

我必须检测用户的时区并将与 GMT 的差异计算为一个数字,对于巴基斯坦可能是 +5,对于印度可能是 +5.5。 现在我的问题是我正在将此连接的数据导出到 CSV 文件中。我必须在“timeline_started_at”和“timeline_finished_at”中添加小时数。我搜索了一下,发现SQL的'DATEADD'方法可以加减小时数。

真正的问题是我不知道在上面的连接中我应该在我的 Laravel 连接中使用 'DATEADD' 函数。

有人可以在这方面帮助我吗?????????

【问题讨论】:

    标签: php sql join laravel-4 laravel-query-builder


    【解决方案1】:

    您可以使用DB::raw() 将sql 函数添加到您的查询中。

    例如:

    $test = DB::table('test')->where(DB::raw('DATE_ADD(created_at, 5)'), '<', $date)->get();
    

    【讨论】:

      【解决方案2】:

      你可以使用类似的东西:

      return DB::table(Location::getTableName() . ' as l')->where('l.company_id', $companyId)
              ->join(User::getTableName() . ' as u', 'u.location_id', '=', 'l.id')->whereIn('l.id', $locationsId)
              ->join(UserTimeline::getTableName() . ' as ut', 'ut.user_id', '=', 'u.id')
              ->join(Status::getTableName() . ' as s', 's.id', '=', 'ut.status_id')
              ->select(
                  'l.name as location_name',
                  'u.first_name as user_first_name',
                  'u.last_name as user_last_name',
                  'u.email as user_email',
                  'DATE_ADD(ut.started_at, INTERVAL '.$var.' HOUR) as timeline_started_at',
                  'DATE_ADD(ut.finished_at, INTERVAL '.$var.' HOUR) as timeline_finished_at',
                  's.id as status_id',
                  's.label as status_label'
              )
              ->orderBy('ut.id', 'asc')
              ->skip($from)
              ->limit($limit)
              ->get();
      

      其中$var 代表小时数。

      【讨论】:

      • 给出错误:SQLSTATE[42S22]: 找不到列:1054 未知列 'DATE_ADD(ut.started_at,' in 'field list' (SQL: select l.name as @987654325 @, u.first_name as user_first_name, u.last_name as user_last_name, u.email as user_email, `...... ........
      • 请尝试添加DB监听并转储执行的SQL?
      • 我不知道如何做DB Listner,还有什么办法?
      • 它不会将查询转储到侦听器中,只是给出错误。如果我转储任何其他查询,它会起作用,但对于这个也不起作用。
      • 你会删除 $var 并只输入一个静态数字 DATE_ADD(ut.started_at, INTERVAL 5 HOUR)
      猜你喜欢
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      相关资源
      最近更新 更多