Symfony 2 - 如何设置三个具有多对多关系的实体之间的关系

时间:2015-05-22 10:28:50

标签: php orm doctrine-orm symfony-2.3

我在我的应用程序中使用Symfony2并使用Doctrine .orm.yml文件进行关系映射。

我有三个实体如下:

  1. 包含id(整数主键),user_name(varchar)

  2. 的用户实体
  3. 投资组合实体,包含id(整数主键),name(varchar),user_id(来自用户的FK,用于识别创建投资组合的人)

  4. 包含id(整数主键),progress_text(varchar)

  5. 的进度实体

    我的问题是我不知道如何设置三个实体之间的多对多关系,即投资组合,用户和进度。

    我想以某种方式设置关系,以便由于此关系而创建的新表包含以下字段:

    1. USER_ID
    2. portfolio_id
    3. progress_id
    4. created_at
    5. 的updated_at
    6. 在上面的列表created_at中,updated_at和type是我用于某些业务规则目的的字段。

      请一些人帮我写他们的.orm.yml文件。据我所知,Symfony2中有内置命令可生成实体及其对应的.orm.yml文件。但我不知道如何在相应的文件中编写上述必需的关系。

1 个答案:

答案 0 :(得分:0)

您需要为此关系创建单独的关联表。 您的ORM文件将如下:


Application\Bundle\Entity\nameofAssociationTable:
  type: entity
  table: nameofAssociationTable
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
  manyToOne:
user:
      targetEntity: Application\Bundle\Entity\User
      cascade: {  }
      mappedBy: null
      inversedBy: null
      joinColumns:
        user_id:
          referencedColumnName: id
      orphanRemoval: false
portfolio:
      targetEntity: Application\PLibBundle\Entity\Portfolio
      cascade:
        - persist
        - remove
      mappedBy: null
      inversedBy: null
      joinColumns:
        portfolio_id:
          referencedColumnName: id
      orphanRemoval: false
  lifecycleCallbacks: {  }
 

同样,您需要将关系添加到manytoOne关系中。感谢。