首页 文章

雄辩的关系(Laravel 5.4)

提问于
浏览
0

我正在制作 Laravel 5.4 应用程序,但我很难弄清楚如何用 eloquent relationships 构建数据 .

这是我的模型以及我希望它们如何相关:

  • School →有 class ,用户和活动

  • User →可以属于学校 . 可以有课程和会话(有案例)

  • Class →属于学校 . 有用户和科目 . 可以做作业

  • Subject →属于一个 class

  • Session →属于用户 . 可以有案例

  • Case →属于某个会话

  • Event →属于学校

  • Homework →属于一个 class

我应该如何在我的Laravel 5.4项目中使用雄辩的关系函数(belongsTo,hasMany等)来构建它?

3 回答

  • 1

    假设类,用户和事件模型具有属性school_id,并且您使用的主键是相应模型的ID,您的类,用户,事件和学校模型应如下所示 .

    学校

    class School extends Model
    {
    public function users(){
        return $this->hasMany('App\User');
    }
    
    public function classes(){
        return $this->hasMany('App\Class');
    }
    
    public function sessions(){
        return $this->hasMany('App\Session');
    }
    }
    

    用户

    class User extends Model
    {
    public function school(){
        return $this->belongsTo('App\School');
    }
    
    public function classes(){
        return $this->hasMany('App\Class');
    }
    
    public function events(){
        return $this->hasMany('App\Event');
    }
    }
    

    class Class extends Model
    {
    public function school(){
        return $this->belongsTo('App\School');
    }
    
    public function users(){
        return $this->hasMany('App\User');
    }
    
    public function subjects(){
        return $this->hasMany('App\Subject');
    }
    public function homeworks(){
        return $this->hasMany('App\Homework');
    }
    }
    

    事件

    class Class extends Model
    {
    public function school(){
        return $this->belongsTo('App\School');
    }
    
    }
    

    您可以使用这些关系来定义具有链接功能的查询 . 例如如果你想获得与学校相关的所有事件,其id属性等于$ id,你可以写,

    $events = App\School::find($id)->events;
    

    Laravel Documentation解释得很好

  • 1

    正确的方法是

    SCHOOL

    public function classes()
    {
        return $this->hasMany('App\Class');
    }
    
    public function users()
    {
        return $this->hasMany('App\User');
    }
    
    public function events()
    {
        return $this->hasMany('App\Event');
    }
    

    CLASS

    public function school()
    {
        return $this->belongsTo('App\School');
    }
    
    public function subjects()
    {
        return $this->hasMany('App\Subject');
    }
    
    public function homeworks()
    {
        return $this->hasMany('App\Homework');
    }
    
    
    public function users()
    {
        return $this->belongsToMany('App\User','class_users','class_id','user_id');
        // this should be many to many because users can also have many classes
    }
    

    USER

    public function school()
    {
       return $this->belongsTo('App\School');
    }
    
    public function classes()
    {
        return $this->belongsToMany('App\Class','class_users','user_id','class_id');
        // this should be many to many as explained to class
    }
    
    public function sessions()
    {
        return $this->belongsToMany('App\Session','session_users','user_id','session_id');
        // like classes do, this should be many to many relationship because sessions can also have many users
    }
    

    SUBJECT

    public function class()
    {
        return $this->belongsTo('App\Class');
    }
    

    SESSION

    public function users()
    {
        return $this->belongsToMany('App\User','session_users','session_id','user_id');
        // should be many to many as well
    }
    
    public function cases()
    {
        return $this->hasMany('App\Case');
    }
    

    CASE

    public function session()
    {
        return $this->belongsTo('App\Session');
    }
    

    EVENT

    public function school()
    {
        return $this->belongsTo('App\School');
    }
    

    HOMEWORK

    public function class()
    {
        return $this->belongsTo('App\Class');
    }
    
  • -1

    创建学校模型和基础表后,就可以创建关系了 . 打开School模型并创建一个名为classes,users和events的公共方法;在它内部引用hasMany方法:

    学校 :

    class School extends Model {
    
      public function classes()
      {
        return $this->hasMany('App\Class');
      }
      public function users()
      {
        return $this->hasMany('App\User');
      }
      public function events()
      {
        return $this->hasMany('App\Event');
      }
    
    }
    

    用户:

    class User extends Model {
    
        public function school(){
            return $this->belongsTo('App\School');
        }
    
        public function classes(){
            return $this->hasMany('App\Class');
        }
    
        public function sessions(){
            return $this->hasMany('App\Session');
        }
    
    }
    

    分类:

    class Class extends Model {
    
        public function school(){
            return $this->belongsTo('App\School');
        }
    
        public function users(){
            return $this->hasMany('App\User');
        }
    
        public function subjects(){
            return $this->hasMany('App\Subject');
        }
    
        public function homeworks(){
            return $this->hasMany('App\Homework');
        }
    
    }
    

    学科 :

    class Subject extends Model {
    
        public function class(){
            return $this->belongsTo('App\Class');
        }
    
    }
    

    Session :

    class Session extends Model {
    
        public function user(){
            return $this->belongsTo('App\User');
        }
    
        public function cases(){
            return $this->hasMany('App\Case');
        }
    
    }
    

    案件 :

    class Case extends Model {
    
        public function session(){
            return $this->belongsTo('App\Session');
        }
    
    }
    

    事件:

    class Event extends Model {
    
        public function school(){
            return $this->belongsTo('App\School');
        }
    
    }
    

    家庭作业:

    class Homework extends Model {
    
        public function class(){
            return $this->belongsTo('App\Class');
        }
    
    }
    

    有关hasMany关系的更多详细信息,请查看此处的链接:EasyLaravelBook

相关问题