2017-05-03 309 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'); 
}