如何在doctrine zend中没有实体的情况下继续加入查询构建器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在doctrine zend中没有实体的情况下继续加入查询构建器相关的知识,希望对你有一定的参考价值。

嗨我有两个表,联系人和标签之间的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实体时它会添加实体,它会抛出实体应该有主键的错误。

任何的想法?

答案

要做左连接:

$queryBuilder->join(table, condition, columns, $queryBuilder::JOIN_LEFT);
with :
table is the name of a table or another Select or array [alias => table]
condition is a string (the same as in Sql language)
columns is an array like [alias => column_name, ...] or [column_name, ...], may be empty
$queryBuilder is a Select, can be replaced by endSqlSelect::JOIN_LEFT

以上是关于如何在doctrine zend中没有实体的情况下继续加入查询构建器的主要内容,如果未能解决你的问题,请参考以下文章

Zend 2 Framework - Doctrine从给定的2个实体生成表

是否可以在没有目标实体的情况下在 Doctrine2 中建立关联?

如何避免与 Doctrine2 和 Zend Framework 2 的多对多关系重复?

在 Zend 框架 2 中使用 MappedSuperclass 的 Doctrine 2 多对多

Zend+Doctrine yml 模式问题

在没有 Doctrine-ORM 注释的情况下填充字段集