2015-09-03 29 views
0

現在我有了這些業務邏輯,但不知道如何在Laravel中定義它。在Laravel中定義複雜業務邏輯中的模型關係

首先,有兩個名爲contactproject,並contactproject模型基本模型擁有許多一對多的關係,所以我定義他們象下面這樣:

class Contact extends Model{ 
    public function projects(){ 
     return $this->belongsToMany('App\Project', 'proj_staff') 
      ->withPivot('role', 'superior'); 
    } 
} 

與同爲Project

class Project extends Model{ 
    public function contacts(){ 
     return $this->belongsToMany('App\Contact', 'proj_staff') 
      ->withPivot('role', 'superior'); 
    } 
} 

正如你看到的,每一個contact在他project或不superior,所以這個問題,用它那浩我可以定義一個關係以獲得superior這樣的訪問權:$contact->projects[0]->superiors,而superiors最好返回一個模型集合,而不僅僅是id

Thx任何方式。

回答

0

您從contacts &訪問projects你想從你的projects模型訪問projects & contacts透視表proj_staff信息。

所以,你必須在你在你的Project 模型從您的數據透視表

class Project extends Model{ 
    public function contacts(){ 
     return $this->belongsToMany('App\Contact', 'proj_staff') 
      ->withPivot('role', 'superior'); 
    } 

    //your project table has one to many many relationship with proj_staff table 
    public function superiors(){ 
     return $this->hasMany('App\ProjStaff', 'superior', 'superior');//set relation keys I assume it's superior is local and foreign key 
    } 
} 

//Create ProjStaff Pivot Table Model under app directory same level with your Contact model 
class ProjStaff extends Model{ 
    //add fillable 
    //add table name 

} 

現在訪問這些數據,你可以輕鬆地訪問優於創建另一個關係就像$contact->projects[0]->superiors->pluck('superior')->all()

+0

同時上級是'Contact'模型,它是兩個聯繫人之間的關係,但是受到'Project'的限制。換句話說,'superior'由'Contact'和'Project'決定,一些在一個項目中聯繫人將成爲某個聯繫人的優勢。 – Usual

+0

任何方式,thx很多爲您慷慨的青睞。 – Usual