2014-05-15 101 views
0
工作

我有一个雄辩的模型中定义的一些查询范围的方法和我打电话他们在控制器允许Laravel建立使用查询在Laravel失败,但在MySQL

return View::make('credit_apps/view')->with('creditApps', CreditApp::ApprovalStatus() 
            ->SalesRep() 
            ->Submitted() 
            ->RefReceived() 
            ->get() 
            ); 

被照亮为返回的错误查询MySQL的语法错误:

Illuminate \ Database \ QueryException SQLSTATE[42000]: Syntax error 
or access violation: 1064 You have an error in your SQL syntax; check 
the manual that corresponds to your MySQL server version for the right 
syntax to use near '' at line 1 (SQL: select * from `credit_apps` 
where `approval_status` = 'Approved' and `sales_rep` = 'Joe Smith' and 
`date_received` between '2014-04-30 00:00:00' AND '2014-05-15 
00:00:00' and `date_ref_received` between '2014-04-27 00:00:00' AND 
'2014-05-30 00:00:00') 

然而,当我分析查询在MySQL Workbench中,或者在命令行虽然标准不返回任何记录它分析得很好,但我知道它不会。尽管如此,这是一个有效的查询,并且在MySQL中工作正常。

是什么导致Laravel抛出错误?

+0

看来,Laravel不喜欢日期的where子句。如果我没有日期搜索它的作品。 – Malchesador

+1

我看到没有错误的SQL查询,但我注意到它说“语法错误或访问冲突”。您是否曾尝试通过终端使用Laravel使用的相同MySQL用户/密码来运行此SQL?此外,“SHOW CREATE TABLE”将非常有用。我假设日期栏是'DATETIME'? – charmeleon

+0

请发表你的 “CreditApp ::审批状态()” laravel代码 – Laurence

回答

1

你应该尝试这样的事:

select * from `credit_apps` 
where `approval_status` = 'Approved' and `sales_rep` = 'Joe Smith' 
and 
(`date_received` between '2014-04-30 00:00:00' and '2014-05-15 00:00:00') 
and 
(`date_ref_received` between '2014-04-27 00:00:00' and '2014-05-30 00:00:00') 
+0

你知道如何使用Laravel的方法在括号中包装它吗? return $ query-> where('date_received','between',''“。$ beg。”'AND'“。$ end。”'“); – Malchesador

+0

你可以使用多个whereBetween:' - > whereBetween('column',array($ from,$ to))' –

+0

工作。虽然Laravel在一个完全有效的SQL语句中抛出了一个错误,但我依然愤怒不已!〜 – Malchesador