Как убрать строку из таблицы «многие ко многим» в доктрине - PullRequest
0 голосов
/ 01 февраля 2019

Привет, у меня есть отношение M: M между двумя таблицами, Контактами и Тегами, и их таблица M: M называется Contacts_Tags:

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

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

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

У меня есть объекты для Контактов, называемых Контактом, и для Тегов, называемых Тегами, но недля таблицы Contacts_Tags.

Я хочу удалить строку только из Contacts_Tags.Это мои отношения в Contact Entity.

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

1 Ответ

0 голосов
/ 01 февраля 2019

Вы можете просто удалить его из коллекции.

вы можете определить функцию в вашем классе контактов следующим образом:

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

После этого сохраните свою сущность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...