如果我直接在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
生成它,所以我不确定这是问题还是其他问题。
答案 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();