Laravel 5.1无效的日期时间格式:7错误:类型日期错误的输入语法无效

时间:2015-11-10 02:53:22

标签: postgresql eloquent laravel-5.1

我一直遇到不断回复错误的雄辩。下面是我试图在laravel中运行的查询。

$actives = ProjectVersion::join('version_employees as ve', 've.report_id' ,'=', 'project_versions.id')
        ->join('employees as e', 've.employee_id', '=', 'e.id')
        ->whereBetween(\DB::raw("'1985-05-27'::date"),[
            \DB::raw("to_date(timeline->>'start_time', 'YYYY-MM-DD')"),
            \DB::raw("to_date(timeline->>'release_time', 'YYYY-MM-DD')")])
        ->groupBy('e.name')
        ->select(\DB::raw('count(e.id), e.name'))
        ->get();

现在返回错误

Invalid datetime format: 7 ERROR: invalid input syntax for type date: "to_date(timeline->>'start_time', 'YYYY-MM-DD')" 

错误消息返回的完整查询是

SELECT count(e.id), e.name 
FROM "project_versions" inner join "version_employees" as "ve" on "ve"."report_id" = "project_versions"."id" inner join "employees" as "e" on "ve"."employee_id" = "e"."id" 
WHERE '1985-05-27'::date 
     BETWEEN to_date(timeline->>'start_time', 'YYYY-MM-DD')      
     AND to_date(timeline->>'release_time', 'YYYY-MM-DD') 
GROUP BY "e"."name"

问题是,当我在pgadmin中运行此查询时,它运行正常并返回我想要的结果。

我被困了几个小时调试这个。知道问题出在哪里?

1 个答案:

答案 0 :(得分:0)

首先,它并不像你在所有Raw语句中使用它那样雄辩; - )

尝试使用Carbon类:Carbon::now()->toDateString()将返回Y-m-d格式的日期。

对于where子句,如果我正确理解您的查询,您可以使用2 where子句而不是whereBetween与Raw SQL:->where('start_time', '>', $start_time_preprocessed_by_carbon)->where('release_time', '<', $release_time_preprocessed_by_carbon)

你似乎想要计数,这意味着你可以用->count()而不是->get()

结束

我很乐意向您提供完整的查询,但无法完全解读。但是,这些实现应该会给你一个正确方向的推动!它们将帮助您进一步抽象查询,以便Laravel的内部查询生成器将代码转换为数据库的正确语法!