2017-05-03 220 views
0

我正在做一个Laravel 5.4应用程序,但我很难搞清楚我应该如何构建我的数据与雄辩关系雄辩的关系(Laravel 5.4)

这是我的模型,我多么希望他们有关系:

  • 学校→先后类,用户和事件

  • 用户→可以属于一所学校。可以有班级和会话(含案例)

  • 班级→属于学校。有用户和主题。可以有功课

  • 主题→属于一类

  • 会议→属于用户。能有案件

  • 案例→属于会话

  • 事件→属于学校

  • 作业→属于一类

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

+2

你会如何做没有说服力的?你有没有试图写下数据库结构? –

+0

你已经知道这些关系。如果您阅读了Laravel的[关系](https://laravel.com/docs/5.4/eloquent-relationships)文档,那么在Laravel中执行它应该很容易。 – Mozammil

+0

主要问题是我不知道什么时候应该使用“hasManyThrough”关系。有人可以解释何时使用它? –

回答

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模型并创建一个名为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

+0

用户应该belongsToMany类作为类也可以有许多用户..这应该通过表...以及会话 – Demonyowh

0

做,这是

学校

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'); 
}