laravel - 基于嵌套关系计数的排序模型 - Laravel 8
问题描述
我有三张桌子categories
、courses
和users
。
courses
并且users
table 有中间 table user_courses
。
他们有以下关系
类别模型
public function courses()
{
return $this->hasMany(Course::class, 'category_id', 'id');
}
课程模式
public function category()
{
return $this->belongsTo(Category::class, 'category_id', 'id');
}
public function users()
{
return $this->belongsToMany(User::class, 'user_courses', 'course_id', 'user_id');
}
现在我想要所有具有用户的课程类别,这些类别应该按users_count
降序排列。
有没有什么雄辩的方法来实现它?
解决方案
您应该在模型中定义hasManyThrough
关系。Category
public function users()
{
return $this->hasManyThrough(User::class, Course::class);
}
然后您可以使用以下内容对您的用户数进行排序
Category::with('courses.users')
->withCount(['users' => function($query) {
$query->orderBy('users_count', 'desc');
}])
->get();
推荐阅读
- php - PHP 使用 JOINS 显示来自 MySQL 的数据
- apache2 - 如何访问logstash过滤步骤中的嵌套字段?
- docker - Kubernetes DNSPolicy 配置
- java - Java 给出看似随机的 StackOverflowError
- ios - 一个应用程序 -> 多种语言
- typescript - 如何在我的自定义类型定义文件中导入其他类型定义
- reactjs - 使用 redux-tooltip 时“this.props.dispatch 不是函数”
- c++ - 为什么不能前向声明 typedef?
- php - Laravel 不断将表迁移到错误的数据库中
- javascript - 选择所有复选框(两个单独的复选框组)