具有3个外键的数据透视表的Eloquenet模型?

时间:2017-03-13 18:54:24

标签: php mysql database eloquent laravel-eloquent

我正在开发一个拥有这种模型的项目。

供应商用于存储所有供应商详细信息的表 - 供应商就像是提供某些服务的公司。

供应商

id  | name
----+-------
 1  | abc 
 2  | def

然后我有一个Services表,其中包含供应商可以提供的所有服务的列表:

服务

id | name
---+----------------
1  |  abc
2  |  def
3  |  ghi

并且有一个区域表,其中包含供应商如果想要在该区域提供服务而可以选择的所有区域的列表。

领域

id | name
---+------
1  | abc
2  | def
3  | ghi

现在我希望有一个数据透视表,用于存储哪个供应商提供哪个服务的详细信息,在哪个区域以及价格是多少,因此我的数据透视表结构如下所示:

vendor_id  | service_id | area_id | price 
-----------+------------+---------+---------
   1       |    1       |    2    |   25.00
   1       |    1       |    1    |   24.00
   2       |    1       |    1    |   23.00

依旧......

所以现在我为区域服务和供应商提供了3种不同的雄辩模型,但由于数据透视表包含3个外键,因此每次供应商更改其偏好时,我都无法正确更新数据透视表。

您能否建议我在这种情况下定义关系的方法,还是应该更改我的表结构来存储这些数据?

1 个答案:

答案 0 :(得分:1)

以下2013年的文章对我有用。

http://developed.be/2013/08/30/laravel-4-pivot-table-example-attach-and-detach/

设置如下所示

Users
id | name | email

Projects
id | title | details

Roles
id | title

Project_User
id | project_id | user_id | role_id

class Project extends Eloquent
{
    public function users(){
        return $this->belongsToMany('User','project_user','project_id','user_id')
            ->withPivot('role_id')
            ->join('roles','role_id','=','roles.id')
            ->select('roles.title as pivot_roles_title');
    }
}