如果我直接在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();