如何在学说中从多对多关系 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);
}
}
之后保留您的实体
您好,我在两个 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);
}
}
之后保留您的实体