Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询在Laravel中未按预期工作_Php_Mysql_Laravel_Laravel 5.4 - Fatal编程技术网

Php 查询在Laravel中未按预期工作

Php 查询在Laravel中未按预期工作,php,mysql,laravel,laravel-5.4,Php,Mysql,Laravel,Laravel 5.4,为了从特定时间段(上周、上月)获取条目,我的控制器中有以下代码: $data=Pedido::where([ ['sitio_id','=',$idSitio],['fechaPedido','>=','CURDATE()-INTERVAl '.$rango.' DAY'] ]) ->latest('fechaPedido') ->get(); echo json_

为了从特定时间段(上周、上月)获取条目,我的控制器中有以下代码:

$data=Pedido::where([
                ['sitio_id','=',$idSitio],['fechaPedido','>=','CURDATE()-INTERVAl '.$rango.' DAY']
                ])
        ->latest('fechaPedido')
        ->get();

        echo json_encode($data);
现在,当我在应用程序中执行它时,它返回表“Pedidos”中的所有条目,而不管我给它的时间间隔是多少天。也就是说,该网站自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 5.4和MySql,我想您的查询无法正常工作的原因是因为您需要转义
“CURDATE()-INTERVAl”。$rango。“DAY”

您可以使用
DB::raw()

whereRaw

$data =  Pedido::where('sitio_id', $idSitio)
    ->where('fechaPedido', '>=', DB::raw('CURDATE()-INTERVAl ' . $rango . ' DAY'))
    ->latest('fechaPedido')
    ->get();
$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\u encode($data)

此外,如果您只想从
路由
/Controller方法返回json,您只需执行
返回$data
和Laravel将为您转换它


希望这有帮助

如果你做'dd(Pedido::where([['sitio_id','=','idstiti','fechaPedido','>=','CURDATE()-INTERVAl'.$rango.'DAY']]->latest('fechaPedido')->toSql()),你会得到什么;它通过
fechaPedido
desc返回“select*from
pedido
where(
sitio\u id
=?和
fechaPedido
>=?)顺序”。这就是原始查询。谢谢谢谢这是没有问题的。另外,使用$data->toJson()而不是json_encode()是否有好处?@BrunoGutierrez我想说的唯一好处是它是可链接的,除此之外,没有任何额外的好处,因为它只是在幕后使用
json_encode
。@BrunoGutierrez请注意使用
db::raw()
db::whereRaw()
将您置于SQL注入漏洞的范围内。确保在这种情况下使用的任何输入都被严格清理。在本例中,这将执行:
whereRaw('fechaPedido>=CURDATE()-INTERVAL.(int)$rango.'DAY')
。出于这个原因,我建议使用最后一个示例:它使用准备好的查询,不易受到SQL注入的攻击。另外,使用
Carbon
过滤用户输入。