让我们说我的店铺模型有如下产品关系:
// shop model class
public function products()
{
return $this->hasMany(Model\Product::class)
->orderBy('name');
}
客户端代码(例如我的控制器)是否可以删除orderBy()
子句?
答案 0 :(得分:3)
是的,有一种方法可以做到这一点,比如在你的控制器中想要获取一些产品
\App\Products::latest()->getQuery();
getQuery()
是一个查询构建器方法,它包含您正在访问或尝试构建的查询的所有分组,选择,订单,轮询,联接等。
所以你可以像这样重置排序:
\App\Products::latest()->getQuery()->orders= [];
因为在Laravel eloquent查询构建器选择,分组,排序存储为键值数组,您只需将其设置为空数组以重置以前的状态。
例如分组:
\App\Products::latest()->getQuery()->groupings =[];
答案 1 :(得分:1)
要重置
$qry->getQuery()->groups = [];
$qry->getQuery()->wheres = [];
用于删除最后一个位置或按列分组
array_pop($qry->getQuery()->groups);
array_pop($qry->getQuery()->wheres);
答案 2 :(得分:0)
public function products($isOrder = true)
{
$hasMany = $this->hasMany(Model\Product::class);
return ($idOrder) ? $hasMany->orderBy('name') : $hasMany;
}
但你只能使用$ shop实例;
$shop->products(false)->...; // your query to get result