我有一个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'函数。
有人可以在这方面帮助我吗??????????
答案 0 :(得分:1)
您可以使用DB::raw()
向查询中添加sql函数。
例如:
$test = DB::table('test')->where(DB::raw('DATE_ADD(created_at, 5)'), '<', $date)->get();
答案 1 :(得分:1)
你可以使用类似的东西:
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
表示小时数。