Laravel 中 withCount() 建立一对一、一对多关系
2019-04-29| 程成| 477| 0| Laravel

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。






×
作者:程成
QQ:492245711