在 Laravel 中,默认情况下数据库查询没有预设的排序顺序,你需要显式地在查询中使用 orderBy
方法来指定排序方式。如果你想让某个模型的所有查询默认按照某个字段降序(desc
)排序,可以通过重写模型的 newQuery
方法或者在查询时默认添加 orderBy
条件来实现。
方法 1:重写 newQuery
方法
在你的模型文件中,你可以重写 newQuery
方法来添加默认的排序条件。例如,如果你想要默认按照 created_at
降序排序,可以在模型类中这样做:
use Illuminate\Database\Eloquent\Builder;
class YourModel extends Model
{
public static function newQuery($excludeDeleted = true)
{
$query = parent::newQuery($excludeDeleted);
$query->orderBy('created_at', 'desc');
return $query;
}
}
方法 2:在查询时使用全局作用域
你还可以定义一个全局作用域来实现默认排序,这给了你更多的灵活性来控制何时应用这个默认排序。
方法 3:直接在查询链中使用
如果你只是想在某一次特定的查询中默认使用 desc
排序,可以直接在查询链中加入 orderBy
方法:
$items = YourModel::orderBy('created_at', 'desc')->get();
注意
根据你的需求,选择合适的方法来实现默认排序。重写 newQuery
方法会全局影响该模型的所有查询,而全局作用域和直接在查询链中使用 orderBy
提供了更细粒度的控制。确保所选择的排序字段和排序方式符合你的业务逻辑需求。
Was this helpful?
0 / 0