首页 > 解决方案 > Laravel:有没有办法删除数据库查询子句?

问题描述

假设我的店铺模型有如下产品关系:

// shop model class

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

有没有办法让客户端代码(例如我的控制器)删除该orderBy()子句?

标签: phplaraveleloquent

解决方案


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

\App\Products::latest()->getQuery();

getQuery()是一种查询构建器方法,其中包含您正在访问或尝试构建的查询的所有分组、选择、订单、位置、连接等。

所以你可以像这样重置排序:

\App\Products::latest()->getQuery()->orders= [];

因为在 Laravel eloquent 查询构建器中,选择、分组、排序存储为键值数组,您只需将其设置为空数组即可重置所有先前的状态。

例如分组:

\App\Products::latest()->getQuery()->groupings =[];

推荐阅读