查询未在Laravel中按预期工作

时间:2017-07-04 21:21:32

标签: php mysql laravel laravel-5.4

为了从特定时间段(上周,上个月)获取参赛作品,我的控制器中有以下代码:

$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

1 个答案:

答案 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会为您转换它。

希望这有帮助!