Laravel5 关联查询 —— 多级一对多的实现

来源:互联网 发布:php中级面试题 编辑:程序博客网 时间:2024/06/11 12:29

例如一个学校,学校有许多年级,年级有许多班级,班级里有许多老师,那么这种多级的多对一该怎么实现呢?

1.先设置他们的Model

学校的: School.PHP

[php] view plain copy
 print?
  1. <?php  
  2.   
  3. namespace App;  
  4.   
  5. use Illuminate\Database\Eloquent\Model;  
  6.   
  7. class schoolClass extends Model  
  8. {  
  9.     protected $table = 'schools';  
  10.   
  11.   public function hasManyGrades(   
  12.    {  
  13.      return $this->hasMany('App\Grade''school_id''id');  
  14.    }  
  15. }  

年级的:Grade.php

[php] view plain copy
 print?
  1. <?php  
  2.   
  3. namespace App;  
  4.   
  5. use Illuminate\Database\Eloquent\Model;  
  6.   
  7. class Grade extends Model  
  8. {  
  9.     protected $table = 'grades';  
  10.   
  11.     public function hasManyClasses()  
  12.         {  
  13.             return $this->hasMany('App\schoolClass''grade_id''id');  
  14.         }  
  15. }  


班级的:schoolSchool.php

[php] view plain copy
 print?
  1. <?php  
  2.   
  3. namespace App;  
  4.   
  5. use Illuminate\Database\Eloquent\Model;  
  6.   
  7. class schoolClass extends Model  
  8. {  
  9.     protected $table = 'jjxiao_classes';  
  10.   
  11.     public function hasManyTeachers()  
  12.         {  
  13.             return $this->hasMany('App\Teacher''class_id''id');  
  14.         }  
  15. }  


老师的:Teacher.php

[php] view plain copy
 print?
  1. <?php  
  2.   
  3. namespace App;  
  4.   
  5. use Illuminate\Database\Eloquent\Model;  
  6.   
  7. class Teacher extends Model  
  8. {  
  9.   protected $table = 'jjxiao_teacher_staffs';  
  10.      
  11. }  


2.控制器里面查出

[php] view plain copy
 print?
  1. public function index(){  
  2.        $id=1;  
  3.        $school=School::find($id);  
  4.        $grades=$school->hasManyGrades()->get();//找到所有的年级  
  5.          
  6.        foreach($grades as $g){  
  7.            $classes[]=$g->hasManyClasses()->get();   //每个年级找到所对应的班级      
  8.        }  
  9.          
  10.        foreach ($classes as $cl) {  
  11.            foreach($cl as $c){  
  12.                $teachers[]=$c->hasManyTeachers()->get(); //每个班级找到老师  
  13.            }  
  14.        }  
  15.   
  16.        foreach ($teachers as $te) {  //给数组脱维  
  17.            foreach($te as $t){  
  18.               $teacher[]=$t;  
  19.            }  
  20.        }  
  21.        return view('home.myschool_teacher.index')  
  22.            ->withGrade($grades)  
  23.            ->withTeacher($teacher);  
  24.    }  

1 0
原创粉丝点击