symfony2 manytomany双向

时间:2014-05-14 20:51:07

标签: symfony doctrine-orm many-to-many bidirectional

我需要两个类之间的ManyToMany关系:User和Document。我有以下内容:

班级用户

   /**
     *  @ORM\Id
     *  @ORM\Column(type="string")
    */
    protected $guid; 


    /**
     * @ORM\ManyToMany(targetEntity="project\DocumentationBundle\Entity\Document", mappedBy="users", cascade={"persist", "remove"})
     **/
    protected $documents;

班级文件

   /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
    */
    protected $id_doc; 

   /**
     * @ORM\ManyToMany(targetEntity="project\UserBundle\Entity\User", inversedBy="documents")
     * @ORM\JoinTable(name="document_user")
     */
    protected $users;   

应用程序应该做的是当用户发布文档时,他可以选择哪些用户可以看到它。这就是我需要这种关系的原因。

当我尝试

  

php app / console doctrine:schema:update --dump-sql

它开火了:

  

为来自的关系引用的列名'id'   project \ DocumentationBundle \ Entity \ Document朝向   project \ UserBundle \ Entity \ User不存在。

我做错了什么?请帮忙!!

1 个答案:

答案 0 :(得分:0)

请参阅:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-unidirectional

您的示例在您的实体中使用非标准列名称作为id字段,其名称为" guid"使用字符串类型而不是" id"具有整数类型的名称,但如果必须使用它 - 您可以 - 但您必须在Document实体中正确使用@joinColumns:

/**
 * @ManyToMany(targetEntity="project\UserBundle\Entity\User")
 * @JoinTable(name="users_documents",
 *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="guid")},
 *      inverseJoinColumns={@JoinColumn(name="document_id", referencedColumnName="id_doc")}
 *      )
 **/