Symfony2 and Doctrine2 - QueryBuilder with relational entities

拈花ヽ惹草 提交于 2019-12-10 11:29:40

问题


In my Symfony2 project, I have a query like this:

$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.'%');

Everything is fine there, but In my paper entity, I have a many to one relation with the section entity. So, I would like to get also:

"OR p.section.name LIKE :q"

How is this possible, should I use a join in order to do that? The query bilder does not know how to use those relations as in the controller: $p->getSection()->getName() or in the twig p.section.name?

Thanks a lot.

EDIT:

What I did for the moment:

$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.'%');

But why Query builder does not use entities and their relations ?


回答1:


Default behaviour does not load related entities' fields for performance reasons, it only provides a proxy class of those relations with OBJECT hydratation (that is default hydratation mode).

You have to state the JOIN as you well did.

EDIT: When you do $p->getSection()->getName() from a Controller or p.section.name from a Twig template, without having stated the JOIN in the query (with default QueryBuilder), Doctrine requests missing informations of the relation at this time. That could be very heavy if you do that in a loop, like in a list display... So try to load what you need from relations at first request ;)



来源:https://stackoverflow.com/questions/17425099/symfony2-and-doctrine2-querybuilder-with-relational-entities

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!