【问题标题】:Eloquent Model for pivot table with 3 foreign keys?具有3个外键的数据透视表的雄辩模型?
【发布时间】:2017-08-03 22:09:20
【问题描述】:

我正在做一个具有这种模型的项目。

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

供应商

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

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

服务

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 个外键,因此每次供应商更改其偏好时,我都无法正确更新数据透视表。

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

【问题讨论】:

  • 与其将其视为一个支点,不如将其视为一个实体,您可以将其称为提供的服务或任何您想要的名称。并为它创建一个雄辩的模型
  • 我在 2020 年搜索了很多,但一无所获。您是如何附加和同步 3 个外键的?因为我必须在数据库中完成相同的场景。

标签: php mysql database eloquent


【解决方案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');
    }
}

【讨论】:

  • 如何在此处附加新条目?
【解决方案2】:

我今天遇到了这个问题。

您可以使用syncWithPivotValues() 方法,传递额外的外键。

$vendor->services()->syncWithPivotValues($service_id, ['area_id' => $area->id])

https://laravel.com/docs/8.x/eloquent-relationships#syncing-associations

【讨论】:

    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多