【问题标题】:How to left join in query builder without entity in doctrine zend如何在学说zend中没有实体的情况下离开查询构建器
【发布时间】: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


【解决方案1】:

要做左连接:

$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 \Zend\Sql\Select::JOIN_LEFT

【讨论】:

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