本地作用域排序相关
This commit is contained in:
parent
85291df5b3
commit
644dfb0896
@ -4,12 +4,13 @@ namespace App\Http\Controllers;
|
|||||||
|
|
||||||
use App\Models\Category;
|
use App\Models\Category;
|
||||||
use App\Models\Topic;
|
use App\Models\Topic;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class CategoriesController extends Controller
|
class CategoriesController extends Controller
|
||||||
{
|
{
|
||||||
public function show(Category $category)
|
public function show(Category $category, Request $request)
|
||||||
{
|
{
|
||||||
$topics = Topic::where('category_id', $category->id)->with('user', 'category')->paginate();
|
$topics = Topic::where('category_id', $category->id)->withOrder($request->order)->with('user', 'category')->paginate();
|
||||||
return view('topics.index', compact('topics', 'category'));
|
return view('topics.index', compact('topics', 'category'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
|||||||
|
|
||||||
use App\Http\Requests\TopicRequest;
|
use App\Http\Requests\TopicRequest;
|
||||||
use App\Models\Topic;
|
use App\Models\Topic;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class TopicsController extends Controller
|
class TopicsController extends Controller
|
||||||
{
|
{
|
||||||
@ -12,9 +13,9 @@ class TopicsController extends Controller
|
|||||||
$this->middleware('auth', ['except' => ['index', 'show']]);
|
$this->middleware('auth', ['except' => ['index', 'show']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function index()
|
public function index(Request $request, Topic $topic)
|
||||||
{
|
{
|
||||||
$topics = Topic::with('user', 'category')->paginate();
|
$topics = $topic->with('user', 'category')->withOrder($request->order)->paginate();
|
||||||
return view('topics.index', compact('topics'));
|
return view('topics.index', compact('topics'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
class Category extends BaseModel
|
class Category extends Model
|
||||||
{
|
{
|
||||||
protected $guarded = ['id'];
|
protected $guarded = ['id'];
|
||||||
|
|
||||||
|
@ -7,6 +7,35 @@ class Topic extends Model
|
|||||||
protected $fillable = ['"title', 'body', 'user_id', 'category_id', 'reply_count', 'view_count', 'last_reply_user_id', 'order', 'excerpt', 'slug'];
|
protected $fillable = ['"title', 'body', 'user_id', 'category_id', 'reply_count', 'view_count', 'last_reply_user_id', 'order', 'excerpt', 'slug'];
|
||||||
|
|
||||||
|
|
||||||
|
public function scopeWithOrder($query, $order)
|
||||||
|
{
|
||||||
|
// 不同的排序,使用不同的数据读取逻辑
|
||||||
|
switch ($order) {
|
||||||
|
case 'recent':
|
||||||
|
$query = $this->recent();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$query = $this->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');
|
||||||
|
}
|
||||||
|
|
||||||
public function user()
|
public function user()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(User::class);
|
return $this->belongsTo(User::class);
|
||||||
|
@ -16,8 +16,10 @@
|
|||||||
|
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<ul class="nav nav-pills">
|
<ul class="nav nav-pills">
|
||||||
<li role="presentation" class="active"><a href="#">最后回复</a></li>
|
<li role="presentation" class="{{active_class(!if_query('order','recent'))}}"><a
|
||||||
<li role="presentation"><a href="#">最新发布</a></li>
|
href="{{Request::url()}}?order=default">最后回复</a></li>
|
||||||
|
<li role="presentation" class="{{active_class(if_query('order','recent'))}}"><a
|
||||||
|
href="{{Request::url()}}?order=recent">最新发布</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user