Laravel 使用 scope 作用域

这篇博客介绍了如何在Laravel中使用scope定义模型层的方法,并在控制器层调用这些方法进行查询操作。scope方法前缀使得在调用时能方便地构建查询条件,参照官方API文档可以了解更多关于scope方法的参数及其用法。
摘要由CSDN通过智能技术生成
  1. 模型层定义方法,加前缀 scope
    public function scopeWithOrder($query, $order)
    {
        //不同的排序,使用不同的数据读取逻辑
        switch ($order) {
            case 'recent':
                $query->recent();
                break;
            default:
                $query->recentReplied();
                break;
        }
        //预加载防止 N+1 问题
        return $query->with('user', 'category');
    }
    
    public function scopeRecentReplied($query)
    {
        //当话题有新回复时,我们将编写逻辑来更新话题模型的 reply_count 属性,
        //此时会自动触发框架对数据模型 updated_at 时间戳的更新
        return $query->orderBy('updated_at', 'desc');
    }
    
    public function scopeRecent($query)
    {
        //按照创建时间排序
        return $query->orderBy('created_at', 'desc');
    }
    
  2. 控制器层通过模型实例调用方法,不用加 scope
   public function index(Request $request, Topic $topic)
    {
        $topics = $topic->withOrder($request->order)->paginate(20);
        return view('topics.index', compact('topics'));
    }
  1. 关于方法中的参数 $query ,查看Api文档了解是 scope 定义的方法有俩个参数,一个是 Builder、一个是 Model
    Eloquent 模型方法前加上一个 scope 前缀,作用域总是返回 查询构建器。在调用 scope 作用域的方法时,通过返回的构建器来拼接成完整的查询条件。
    https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Scope.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值