如何在学说中从多对多关系 table 中删除行

How to drop row from many to many relationship table in doctrine

您好,我在两个 table、联系人和标签之间有 M:M 关系,它们的 M:M table 称为 Contacts_Tags:

Contacts
------------
ID
Name

Tags
-----------
ID
Name

Contacts_Tags
--------------
Contact_ID
Tag_ID

我有名为 Contact 的联系人实体和名为 Tag 的标签实体,但没有 Contacts_Tags table.

我只想删除 Contacts_Tags 中的行。这是我在 Contact 实体中的关系。

/**
 * Many Contacts have Many Tags.
 * @ORM\ManyToMany(targetEntity="Tag", inversedBy="contacts", cascade={"remove"})
 * @ORM\JoinTable(name="Contacts_Tags",
 *      joinColumns={@ORM\JoinColumn(name="Tag_ID", referencedColumnName="ID")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="Contact_ID", referencedColumnName="ID")}
 *      )
 */
private $tags;

我试过这个查询,但没有帮助

$queryBuilder                    =  $this->entityManager->getRepository(Contact::class)->createQueryBuilder("o")
            ->leftJoin("o.tags", "ct")
            ->leftJoin(Tag::class, "t", "WITH", "t.ID", "ct.Tag_ID")
            ->where("t.Name = :tagName")
            ->delete("o.tags", "ct")
            ->setParameter(":tagName", $diffBeat)
        ;

您可以将其从 collection 中删除。

您可以在联系人 class 中定义一个函数,如下所示:

function removeTag(Tag $tag)
{
   if($this->tags->contains($tag)){
      $this->tags->removeElement($tag);
   }
}

之后保留您的实体