Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.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 Larvel:有没有办法删除DB查询子句?_Php_Laravel_Eloquent - Fatal编程技术网

Php Larvel:有没有办法删除DB查询子句?

Php Larvel:有没有办法删除DB查询子句?,php,laravel,eloquent,Php,Laravel,Eloquent,假设我的店铺模型与以下产品的关系: // shop model class public function products() { return $this->hasMany(Model\Product::class) ->orderBy('name'); } 是否有一种方法可以让客户端代码(例如我的控制器)删除orderBy()子句?是的,有一种方法可以做到这一点,比如在控制器中,您希望获取一些产品 \App\Products::latest()-&g

假设我的店铺模型与以下产品的关系:

// shop model class

public function products()
{
    return $this->hasMany(Model\Product::class)
        ->orderBy('name');
}

是否有一种方法可以让客户端代码(例如我的控制器)删除
orderBy()
子句?

是的,有一种方法可以做到这一点,比如在控制器中,您希望获取一些产品

\App\Products::latest()->getQuery();
getQuery()
是一个查询生成器方法,它包含您正在访问或试图构建的查询的所有分组、选择、顺序、位置、联接等

因此,您可以按如下方式重置顺序:

\App\Products::latest()->getQuery()->orders= [];
由于在Laravel eloquent query builder中,选择、分组、排序存储为键值数组,因此只需将其设置为空数组即可重置所有以前的状态

例如,分组:

\App\Products::latest()->getQuery()->groupings =[];
但您只能使用$shop实例

$shop->products(false)->...; // your query to get result
重置

$qry->getQuery()->groups = [];
$qry->getQuery()->wheres = [];
对于“删除最后一个位置”或“按列分组”

array_pop($qry->getQuery()->groups);

array_pop($qry->getQuery()->wheres);

当然,这也适用于
limit
子句。但请不要犯与我相同的错误,如果您有
offset
子句,请记住也删除它<代码>$query->limit=null$查询->偏移量=null如果您使用的是Laravel,并且需要使用与原始表查询相同的参数,但没有
limit
(分页)子句,这将非常有用。我在Laravel 5.8中检查了它。分组被命名为“组”。这样做可能会弄乱绑定,您可能还想过滤它们。。。
array_pop($qry->getQuery()->groups);

array_pop($qry->getQuery()->wheres);