【问题标题】:Laravel 4 Polymorphic with multiple Pivot Tables具有多个数据透视表的 Laravel 4 多态
【发布时间】:2023-03-07 18:46:02
【问题描述】:

我正在尝试创建与多个数据透视表的多态关系。我有一个可以分配给帐户、角色、旅行和国家/地区的要求表。这需要是多对多的关系,因为相同的要求可能适用于多个国家和/或旅行和/或帐户等。

然后,我需要一个表格,列出用户的未完成要求。例如:如果用户有某个帐户并且有与该帐户相关的需求,那么这些需求将被添加到用户的需求列表中。

我的一个解决方案是首先使用多对多关系中的数据透视表将需求分配给帐户、角色、旅行和国家/地区。然后使用多态关系,我会将用户连接到相关的任何数据透视表。

但我不知道如何做到这一点,或者是否有可能?

这是我的桌子:

用户要求
- 身份证
- 用户 ID
- 必需的_id
- required_type

account_requirement
- 身份证
- account_id
- 需求ID

角色要求
- 身份证
- 角色 ID
- 需求ID

trip_requirement
- 身份证
- account_id
- 需求ID

国家/地区要求
- 身份证
- account_id
- 需求ID

【问题讨论】:

标签: php many-to-many laravel-4 pivot-table polymorphism


【解决方案1】:

Laravel 4.1 现在支持多态多对多关系。

下面的示例显示了我如何实现与产品和帖子共享照片。

数据库架构

照片

id              integer
filename        string
alt             string

拍照

id              integer
photoable_id    integer
photoable_type  string

模型

照片模特

class Photo extends Eloquent
{
public function products(){
    return $this->morphedByMany('Product', 'photoable');
}

public function posts(){
    return $this->morphedByMany('Post', 'photoable');
}
}

产品型号

class Product extends Eloquent
{
public function photos(){
    return $this->morphToMany('Photo', 'photoable');
}
}

后模型

class Post extends Eloquent
{
public function photos(){
    return $this->morphToMany('Photo', 'photoable');
}
}

通过以上内容,我可以访问附加到产品的所有照片,如下所示:

$product = Product::find($id);
$productPhotos = $product->photos()->all();

我还可以迭代以将所有照片显示为任何模型集合。

foreach ($productPhotos as $photo)
{
    // Do stuff with $photo
}

以上内容几乎可以完全按照您的要求进行复制。

  1. 创建requirements
  2. 创建requireable
  3. Requirement 模型中,声明所有 morphedByMany 关系
  4. 在 Country、Trip、Role 等中声明 morphToMany 关系

nb - 我是在没有代码编辑器的情况下在 S/O 中徒手输入的,所以可能会有错字、错误或两个 - 但概念保持不变。

【讨论】:

    【解决方案2】:

    polymorphic relation in Laravel 4 用于单个模型关联,因此您无法使用此方法实现您尝试构建的内容。这是因为数据透视表不代表模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多