withCount 是 Laravel5.3 及其以后版本才有,5.2及其以下会报错:方法未定义。
比如:
我有一张学生表,一张课程表,一张班主任表。一个学生对应了一个班主任,一个学生对应了多个课程。
我想通过学生表,用 withCount 连接两张表,计算出该学生的课程数量和班主任数量。
原料:
准备好三张表的模型代码文件。建立学生与课程老师的关联关系,且方法名和 withCount 里面名字一样。
举例:
学生模型 Student.php 模型中定义方法,与课程建立一对多关系
public function course(){ return $this->hasMany(Course::class, 'student_id', 'id')->orderBy('created_at', 'desc'); }
学生模型 Student.php 模型中定义方法,与老师建立一对一关系
public function teacher(){ return $this->hasOne(Teacher::class, 'id', 'teacher_id'); }
定义完毕后,就可以把模型中定义的方法名以数组形式传入 withCount() 中了。
$students = Student::orderBy('created_at', 'desc')->withCount(["course","teacher"])->paginate(10);
模版中,结果以 定义的方法名字+“_count” 组合的字段显示。这里是 course_count 和 teacher_count。