Php 如何通过多个实体将实体与其自身关联?
我的实体“文档”与不同的实体相关,例如“成员”、“产品”或“项目” 在my mySQL数据库中,这会创建如下表:Php 如何通过多个实体将实体与其自身关联?,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,我的实体“文档”与不同的实体相关,例如“成员”、“产品”或“项目” 在my mySQL数据库中,这会创建如下表: documents_members documents_products documents_projects 现在,我试着从一个文档到另一个文档,与许多人建立关系。所以我添加了很多文档,我希望我的数据库中有这个表: documents_documents 这是我的方法: 您需要映射关系的双方 每个文档链接到多个其他文档,许多其他文档可能链接到此文档 大概是这样的: /**
documents_members
documents_products
documents_projects
现在,我试着从一个文档到另一个文档,与许多人建立关系。所以我添加了很多文档,我希望我的数据库中有这个表:
documents_documents
这是我的方法:
您需要映射关系的双方 每个
文档
链接到多个其他文档,许多其他文档
可能链接到此文档
大概是这样的:
/**
* Many Documents link to many Documents.
* @ORM\ManyToMany(targetEntity="App\Entity\Documents", inversedBy="linkedFromDocuments")
* @ORM\JoinTable(name="document_links",
* joinColumns={@ORM\JoinColumn(name="link_origin", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="link_destination", referencedColumnName="id")}
* )
*/
private $linkedDocuments;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Documents", mappedBy="linkedDocuments")
*/
private $linkedFromDocuments;
这将创建一个名为document\u links
的表,其中有两列:link\u origin
和link\u destination
。在每一列上都会有一个外键指向文档
请注意,这种关系是双向的。因此,您可以将
document#1
链接到document#2
,也可以将document#2
指向document#1
(联接表中有两个不同的行)。您的应用程序可能需要对此进行解释。。这是否只能通过控制台创建?php bin/console make:要创建或更新的实体的实体类名(例如BraveChef):>要停止添加字段的文档):>文档字段类型(输入?查看所有类型)[string]:>关系不知道,但对于更复杂的关系,您最好手工操作。我得到一个错误:[语义错误]property App\Entity\Documents::$linkedDocuments中的注释“@JoinColumn”从未导入。您是否忘记为该批注添加“use”语句?
我检查过,它看起来正确。但也许我必须替换这些值documentLinks
,link\u origin
,link\u destination
?我从您的示例中复制了它,但不知道在我的代码中哪里可以找到替换项
/**
* Many Documents link to many Documents.
* @ORM\ManyToMany(targetEntity="App\Entity\Documents", inversedBy="linkedFromDocuments")
* @ORM\JoinTable(name="document_links",
* joinColumns={@ORM\JoinColumn(name="link_origin", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="link_destination", referencedColumnName="id")}
* )
*/
private $linkedDocuments;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Documents", mappedBy="linkedDocuments")
*/
private $linkedFromDocuments;