2015-04-06 63 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