如何通过 ManyToMany 将一个实体与其自身相关联?
How can I relate an entity with itself via ManyToMany?
我的实体 "Documents" 与不同的实体相关,例如 "members"、"products" 或 "projects"。
在我的 mySQL 数据库中,这会创建 table 如下:
documents_members
documents_products
documents_projects
现在我尝试用 manytomany 从文档到文档创建关系。所以我添加了 manytomany 文件,我希望我的数据库中有这个 table:
documents_documents
这是我的方法:
namespace App\Entity;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ORM\Entity(repositoryClass="App\Repository\DocumentsRepository")
*
*/
class Documents {
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Groups("documents")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="Products", inversedBy="documents")
* @ORM\JoinColumn(name="products", referencedColumnName="id")
* @Groups("documents")
*/
private $products;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Projects", inversedBy="documents")
* @Groups("documents")
*/
private $projects;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Members", inversedBy="documents")
* @Groups("documents")
*/
private $members;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Documents", mappedBy="documents")
*/
private $documents;
}
您需要映射关系的双方。
每个 document
link 到几个其他文档,许多其他 documents
可能 link 这个。
像这样:
/**
* 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_links
的 table,包含两列:link_origin
和 link_destination
。在这些列中的每一列上,都会有一个指向 documents
.
的外键
请注意,该关系是双向的。因此,您可能将 document#1
link 编辑为 document#2
,并且 document#2
指向 document#1
(连接 table 中的两个不同行)。您的应用程序可能需要考虑到这一点。
我的实体 "Documents" 与不同的实体相关,例如 "members"、"products" 或 "projects"。
在我的 mySQL 数据库中,这会创建 table 如下:
documents_members
documents_products
documents_projects
现在我尝试用 manytomany 从文档到文档创建关系。所以我添加了 manytomany 文件,我希望我的数据库中有这个 table:
documents_documents
这是我的方法:
namespace App\Entity;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ORM\Entity(repositoryClass="App\Repository\DocumentsRepository")
*
*/
class Documents {
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Groups("documents")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="Products", inversedBy="documents")
* @ORM\JoinColumn(name="products", referencedColumnName="id")
* @Groups("documents")
*/
private $products;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Projects", inversedBy="documents")
* @Groups("documents")
*/
private $projects;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Members", inversedBy="documents")
* @Groups("documents")
*/
private $members;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Documents", mappedBy="documents")
*/
private $documents;
}
您需要映射关系的双方。
每个 document
link 到几个其他文档,许多其他 documents
可能 link 这个。
像这样:
/**
* 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_links
的 table,包含两列:link_origin
和 link_destination
。在这些列中的每一列上,都会有一个指向 documents
.
请注意,该关系是双向的。因此,您可能将 document#1
link 编辑为 document#2
,并且 document#2
指向 document#1
(连接 table 中的两个不同行)。您的应用程序可能需要考虑到这一点。