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);