DATE(列)过滤器不返回任何内容

时间:2015-04-06 12:55:52

标签: php mysql laravel laravel-4

如果我直接在phpmyadmin中运行以下查询,我会得到所需的结果

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 个答案:

答案 0 :(得分:2)

你有拼写错误,而不是:

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

你应该使用:

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

答案 1 :(得分: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();