在Laravel

时间:2015-09-03 05:08:26

标签: laravel model

现在我有了这些业务逻辑,但不知道如何在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');
    }
}

如您所见,每个contactsuperior中都有project,因此问题是如何定义关系以获取{{1}像这样:superior,而$contact->projects[0]->superiors最好返回一个模型集合,而不仅仅是superiors

无论如何。

1 个答案:

答案 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()

等优秀内容