现在我有了这些业务逻辑,但不知道如何在Laravel中定义它。
首先,有两个名为contact
和project
的基本模型,contact
和project
模型拥有多对多关系,因此我将它们定义如下:
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
在superior
中都有project
,因此问题是如何定义关系以获取{{1}像这样:superior
,而$contact->projects[0]->superiors
最好返回一个模型集合,而不仅仅是superiors
。
无论如何。
答案 0 :(得分:0)
您正在从 projects
&中访问 contacts
。您想要访问 projects
&来自 contacts
模型的 proj_staff
数据透视表 projects
信息。
因此,您必须在
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()