【发布时间】:2019-01-31 11:19:04
【问题描述】:
您好,我在 Contacts 和 Tags 这两个表之间有 M:M 关系,它们的 M:M 表称为 Contacts_Tags:
Contacts
------------
ID
Name
Tags
-----------
ID
Name
Contacts_Tags
--------------
Contact_ID
Tag_ID
我有名为Contact 的联系人和名为Tag 的标签的实体,但没有用于Contacts_Tags 表的实体。
我想离开查询生成器
$queryBuilder = $this->entityManager->getRepository(Contact::class)->createQueryBuilder("o")->select("o");
$queryBuilder->leftJoin(//here, "et", "WITH", "et.Contact_ID = o.ID")
->leftJoin(Tag::class, "t", "WITH", "t.ID = et.Tag_ID")
;
但我不知道如何添加它。我尝试了文档,但是当我添加ContactTag 的实体时它说要添加实体,它会抛出实体应该具有主键的错误。
有什么想法吗?
【问题讨论】:
-
如果这是一个 M:M 双向 关系,为什么不简单:
$contact->getTags()或$tag->getContacts()?如果它是单向的,以Contact作为拥有方,你可以做$contact->getTags(),如果Tag是拥有者,那么$tag->getContacts()。如果您真的想要/需要为此使用 QB,那么您可能需要阅读课程代码。另外,我认为您应该使用Join::ON而不是"WITH"(请参阅\Doctrine\ORM\QueryBuilder#leftJoin)
标签: zend-framework doctrine-orm doctrine left-join zend-framework3