gpt4 book ai didi

php - Symfony2 和 Doctrine - 带有关系实体的查询生成器

转载 作者:行者123 更新时间:2023-12-04 04:51:12 26 4
gpt4 key购买 nike

在我的 Symfony2 项目中,我有一个这样的查询:

$paperQB = $this->createQueryBuilder( 'p' )
->select('p')
->where("p.title LIKE :q OR p.keywords LIKE :q OR p.abstract LIKE :q OR p.id LIKE :q")
->setFirstResult( $first_result )
->setMaxResults( $papers_per_page )
->orderBy($sort_by_culumn, $sort_by_order)
->setParameter('q', '%'.$q.'%');

那里一切都很好,但是在我的论文实体中,我与部分实体之间存在多对一的关系。所以,我也想得到:
"OR p.section.name LIKE :q"
这怎么可能,我应该使用连接来做到这一点吗?查询 bilder 不知道如何使用 Controller 中的这些关系: $p->getSection()->getName()或在 Twig p.section.name ?

非常感谢。

编辑:

我暂时做了什么:
$paperQB = $this->createQueryBuilder( 'p' )
->select('p')
->where("p.title LIKE :q OR p.keywords LIKE :q OR p.abstract LIKE :q OR p.id LIKE :q OR s.name LIKE :q OR c.name_full LIKE :q")
->leftJoin('p.conference', 'c')
->leftJoin('p.section', 's')
->setFirstResult( $first_result )
->setMaxResults( $papers_per_page )
->orderBy($sort_by_culumn, $sort_by_order)
->setParameter('q', '%'.$q.'%');

但是为什么查询构建器不使用实体及其关系?

最佳答案

出于性能原因,默认行为不会加载相关实体的字段,它仅提供具有 OBJECT 水化(即默认水化模式)的那些关系的代理类。

你必须像你所做的那样声明 JOIN。

编辑:当您这样做时$p->getSection()->getName()来自 Controller 或 p.section.name来自 Twig 模板,没有在查询中声明 JOIN(使用默认 QueryBuilder),此时 Doctrine 请求关系的缺失信息。如果您在循环中执行此操作,则可能会非常繁重,例如在列表显示中...因此请尝试在第一次请求时从关系中加载您需要的内容;)

关于php - Symfony2 和 Doctrine - 带有关系实体的查询生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17425099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com