【问题标题】:Laravel - ManyToMany Pivot Table With Other RelationshipLaravel - 具有其他关系的多对多数据透视表
【发布时间】:2016-02-22 17:59:39
【问题描述】:

在 Laravel 5.2 中,假设我在两个模型之间有一个 ManyToMany 关系,PostTag(为了举例)。但是,它们之间的数据透视表也与另一个表有关系:

posts:
  id
  name:

tags:
  id
  name:

posts_tags:
   post_id
   tag_id
   priority_id

priorities
   id:
   value:

如您所见,posts_tags 表示PostTag 之间的many-to-many 关系。但是,该关系的该实例也与Priorities 具有One To Many 关系

如何在 Eloquent 中建立这种关系?

【问题讨论】:

  • 优先有很多帖子?
  • @JilsonThomas 不幸的是,事情没那么简单。优先级适用于帖子和标签之间关系的特定实例。优先级不仅适用于帖子
  • 在这种情况下,您如何称呼优先级?能用简单的英文解释一下吗?
  • @JilsonThomas 本质上,有几个不同的优先级,帖子被添加到帖子队列中。 Post 和 Tag 之间的关系表示“排队”项目。但是,每个实例都可以有一个优先级,客户端代码使用该优先级来确定每个 Post 在队列中的功能。
  • 文档说:如果您的数据透视表包含额外的属性,则必须在定义关系时指定它们:return $this->belongsToMany('App\Role')->withPivot('column1', 'column2');

标签: php laravel orm eloquent


【解决方案1】:

目前,我将ManyToMany 保持在PostTag 之间,但是,我现在只是将priority_id 作为属性存储在数据透视表上。 Priority 只有一个 ID 和一个 Name,所以我选择将 Priority 的映射存储在 Laravel 配置文件中。所以现在,当我为特定的PostTag 提取记录时,我可以将priority_id 作为一列提取并将其映射到我的配置中的一个值,而不是将这些数据作为显式关系存储在数据库中:

<?php

return [

   'priorities' => [
       1 => 'first value',
       2 => 'second value',
       3 => 'third value',
       // etc
    ]
];

【讨论】:

    猜你喜欢
    • 2023-02-05
    • 1970-01-01
    • 2018-09-23
    • 2019-02-13
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多