2015-04-06 55 views
0

如果我直接在phpmyadmin運行下面的查詢,我得到了想要的結果DATE(柱)過濾器沒有返回

select * from trips where route_from = 'CityA' and route_to = 'CityB' and DATE(start_date) = '2015-04-07' 

但是,如果我運行它作爲PHP代碼,它返回一個空的結果

Trip::whereRouteFrom('CityA') 
       ->whereRouteTo('CityB') 
       ->where(\DB::raw('DATE(start_date)', '=', '2015-04-07'))->get(); 

的ORM執行的SQL代碼是(我得到它通過->toSql())以下:

select * from `trips` where `route_from` = ? and `route_to` = ? and DATE(start_date) is null 

現在,我想這個問題在DATE(...) is ...。當我在phpmyadmin中運行is的SQL代碼時,它會給我語法錯誤。與=工作正常。但是框架使用is生成它,所以我不確定這是問題還是有其他問題。

回答

2

你有錯字,而不是:

->where(\DB::raw('DATE(start_date)', '=', '2015-04-07'))->get(); 

你應該使用:

->where(\DB::raw('DATE(start_date)'), '=', '2015-04-07')->get(); 
1

你是不是想用whereRaw

如果是的話,代碼應該看起來是正確的。

Trip::whereRouteFrom('CityA') 
       ->whereRouteTo('CityB') 
       ->whereRow('DATE(start_date) = "2015-04-07"')) 
       ->get(); 

或者,如果你想傳遞動態值,你可以在第二個參數傳遞它。

$date = "2015-04-07"; 
Trip::whereRouteFrom('CityA') 
        ->whereRouteTo('CityB') 
        ->whereRow('DATE(start_date) = ?', array($date)) 
        ->get(); 
+0

我的問題是一個錯字(正如接受的答案所暗示的),但我真的很喜歡你的解決方案! :) – Milkncookiez 2015-04-06 13:35:03

+0

我很高興它有幫助。 :) – mininoz 2015-04-06 13:36:23