【问题标题】:How to drop row from many to many relationship table in doctrine如何在学说中从多对多关系表中删除行
【发布时间】:2019-02-01 16:37:15
【问题描述】:

您好,我在 Contacts 和 Tags 这两个表之间有 M:M 关系,它们的 M:M 表称为 Contacts_Tags:

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

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

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

我有联系人的实体,称为 Contact 和标签的实体,称为 Tag,但没有 Contacts_Tags 表。

我只想从Contacts_Tags 中删除行。这是我在ContactEntity 中的关系。

/**
 * 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)
        ;

【问题讨论】:

    标签: php zend-framework doctrine many-to-many


    【解决方案1】:

    您可以将其从集合中删除。

    你可以像这样在你的 Contact 类中定义一个函数:

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

    之后持久化你的实体

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多