DATE(列)筛选器不返回任何内容


DATE(column) filter returns nothing

如果我直接在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生成的,所以我不确定这是问题所在还是其他原因。

您有打字错误,而不是:

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

您应该使用:

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

您正在尝试使用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();