我正在做一個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」關係。有人可以解釋何時使用它? –