Laravel:有没有办法删除数据库查询子句?

时间:2018-06-09 10:29:56

标签: laravel eloquent

让我们说我的店铺模型有如下产品关系:

// shop model class

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

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

3 个答案:

答案 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