我正在做一个Laravel 5.4应用程序,但我很难搞清楚我应该如何构建我的数据与雄辩关系。雄辩的关系(Laravel 5.4)
这是我的模型,我多么希望他们有关系:
学校→先后类,用户和事件
用户→可以属于一所学校。可以有班级和会话(含案例)
班级→属于学校。有用户和主题。可以有功课
主题→属于一类
会议→属于用户。能有案件
案例→属于会话
事件→属于学校
作业→属于一类
如何我应该用雄辩的关系函数来结构化(belongsTo,hasMany等等)在我的Laravel 5.4项目中?
我正在做一个Laravel 5.4应用程序,但我很难搞清楚我应该如何构建我的数据与雄辩关系。雄辩的关系(Laravel 5.4)
这是我的模型,我多么希望他们有关系:
学校→先后类,用户和事件
用户→可以属于一所学校。可以有班级和会话(含案例)
班级→属于学校。有用户和主题。可以有功课
主题→属于一类
会议→属于用户。能有案件
案例→属于会话
事件→属于学校
作业→属于一类
如何我应该用雄辩的关系函数来结构化(belongsTo,hasMany等等)在我的Laravel 5.4项目中?
假设类,用户和事件模型有一个属性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解释得很好
与学校模型和创建基础表,现在是创建关系的时候了。打开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');
}
}
会议:
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 RELAT的更多细节ionship,请查看这里的链接:EasyLaravelBook
用户应该belongsToMany类作为类也可以有许多用户..这应该通过表...以及会话 – Demonyowh
做,这是
学校
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
}
用户
正确的方法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');
}
会议
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');
}
你会如何做没有说服力的?你有没有试图写下数据库结构? –
你已经知道这些关系。如果您阅读了Laravel的[关系](https://laravel.com/docs/5.4/eloquent-relationships)文档,那么在Laravel中执行它应该很容易。 – Mozammil
主要问题是我不知道什么时候应该使用“hasManyThrough”关系。有人可以解释何时使用它? –