Php 雄辩的关系(拉威尔5.4)

Php 雄辩的关系(拉威尔5.4),php,laravel,eloquent,laravel-5.4,laravel-eloquent,Php,Laravel,Eloquent,Laravel 5.4,Laravel Eloquent,我正在制作一个Laravel5.4应用程序,但我很难弄清楚我应该如何用雄辩的关系来构建数据 这是我的模型以及我希望它们如何关联: 学校→ 拥有类、用户和事件 使用者→ 可以属于一所学校。可以使用案例进行课程和会话 阶级→ 属于一所学校。有用户和主题。我可以做作业 主题→ 属于一个阶级 会议→ 属于某个用户。可以有箱子吗 案例→ 属于某个会话 事件→ 属于一所学校 家庭作业→ 属于一个阶级 在我的Laravel 5.4项目中,我应该如何用以下雄辩的关系函数来构建它?假设类、用户和事件模型有一个属性

我正在制作一个Laravel5.4应用程序,但我很难弄清楚我应该如何用雄辩的关系来构建数据

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

学校→ 拥有类、用户和事件

使用者→ 可以属于一所学校。可以使用案例进行课程和会话

阶级→ 属于一所学校。有用户和主题。我可以做作业

主题→ 属于一个阶级

会议→ 属于某个用户。可以有箱子吗

案例→ 属于某个会话

事件→ 属于一所学校

家庭作业→ 属于一个阶级


在我的Laravel 5.4项目中,我应该如何用以下雄辩的关系函数来构建它?

假设类、用户和事件模型有一个属性school\u 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');
}
}
使用者

阶级

事件

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

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

Laravel解释得很好

创建了学校模型和基础表,现在是创建关系的时候了。打开学校模型并创建名为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');
    }

}
会议:

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关系的更多详细信息,请查看此处的链接:

正确的方法是

学校

阶级

使用者

主题

会议

案例

事件

家庭作业


没有雄辩,你怎么做?你试过写下数据库结构吗?你已经知道了它们之间的关系。如果你阅读了关于Laravel的文档,在Laravel中应该很容易做到。主要的问题是我不知道什么时候应该使用hasManyThrough关系。有人能解释一下什么时候用这个吗?@Kristoferdamborgjørgensen可能不会。有两个原因:1这不是你在问题中问的问题,2这是一个广泛的问题。另外,你应该保持它的简单愚蠢,如果你更了解其他关系,它应该能满足你的要求。@Wistar-保持它的简单愚蠢是很有意义的:D像user_id等外键如何,我需要自己添加它们,还是雄辩为我这样做用户应该属于多个类,因为类也可以有多个用户。。这应该由一个表来透视。。以及会议
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');
    }

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

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

public function events()
{
    return $this->hasMany('App\Event');
}
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
}
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
}
public function class()
{
    return $this->belongsTo('App\Class');
}
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');
}
public function session()
{
    return $this->belongsTo('App\Session');
}
public function school()
{
    return $this->belongsTo('App\School');
}
public function class()
{
    return $this->belongsTo('App\Class');
}