2014-05-15 126 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