为了从特定时间段(上周,上个月)获取参赛作品,我的控制器中有以下代码:
$data=Pedido::where([
['sitio_id','=',$idSitio],['fechaPedido','>=','CURDATE()-INTERVAl '.$rango.' DAY']
])
->latest('fechaPedido')
->get();
echo json_encode($data);
现在,当我在我的应用程序中执行它时,它返回Table" Pedidos"中的所有条目,无论我给它的日间隔。 I.E该网站自24天以来在Pedidos中没有新条目,因此按周(7天)它应该返回null。
虽然当我针对我的datqbase运行类似的SQL查询时,它运行得很好。
select * from `pedido` where (`sitio_d` = 1 and `fechaPedido` >= CURDATE()-INTERVAl 7 DAY) order by `fechaPedido` desc
当我在PHPMyAdmin中运行它时,它返回一个空结果,如果我改变那里的间隔,它会给我正确的输出。
但是在Web应用程序中,无论时间间隔如何,它总是返回表中的所有条目。
尝试使用DB :: raw解决它,但无论日期如何,它都会抛出一个空结果。
为什么这不起作用?还是一种检查发送到数据库的原始SQL laravel的方法?
我正在使用Laravel 5.4和MySql
答案 0 :(得分:2)
我认为您的查询无法正常工作的原因是因为您需要转义'CURDATE()-INTERVAl '.$rango.' DAY'
。
您可以使用DB::raw()
:
$data = Pedido::where('sitio_id', $idSitio)
->where('fechaPedido', '>=', DB::raw('CURDATE()-INTERVAl ' . $rango . ' DAY'))
->latest('fechaPedido')
->get();
whereRaw
:
$data = Pedido::where('sitio_id', $idSitio)
->whereRaw('fechaPedido >= CURDATE()-INTERVAl ' . $rango . ' DAY')
->latest('fechaPedido')
->get();
甚至只是使用碳实例来传递日期
$data = Pedido::where('sitio_id', $idSitio)
->where('fechaPedido', '>=', \Carbon\Carbon::now()->subDays($rango)->startOfDay())
->latest('fechaPedido')
->get();
此外,在这种情况下,Eloquent将返回一个集合,因此您可以$data->toJson()
代替json_encode($data)
。
此外,如果您只是从return
/ Controller方法转到Route
json,您可以return $data;
,Laravel会为您转换它。
希望这有帮助!