laravel 模型方法中的本地作用域
2018年6月26日这里我们使用了 Laravel 本地作用域 。本地作用域允许我们定义通用的约束集合以便在应用中复用。要定义这样的一个作用域,只需简单在对应 Eloquent 模型方法前加上一个 scope 前缀,作用域总是返回 查询构建器。一旦定义了作用域,则可以在查询模型时调用作用域方法。在进行方法调用时不需要加上 scope 前缀。如以上代码中的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php class Topic extends Model { . . . 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'); } } |