Symfony2:fetch ="EAGER"创建连接吗?

trr*_*rrm 5 php mysql sql symfony doctrine-orm

我在我的product实体中有这个映射的属性:

/**
 * @ORM\ManyToMany(targetEntity="Group", mappedBy="products", indexBy="id", fetch="EAGER")
 *
 */
protected $groups;
Run Code Online (Sandbox Code Playgroud)

我想知道,我的理解fetch="EAGER"是,一旦产品被选中它应该得到组,这就是发生的事情,但每当我做一个像findBy()一个查询来获得product和另一个获得的时候它会使用2个查询groups.

反正是否有make findBy()或其他帮助方法在一个查询中得到productgroups或唯一的方法是编写自定义存储库函数并LEFT-JOIN自己做?

UPDATE

我尝试了多种解决方案并最终覆盖了以下findBy()功能:

public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
{
    $q = $this
    ->createQueryBuilder('u')
    ->select('u, g')
    ->leftJoin('u.groups', 'g')
    ->setFirstResult( $offset )
    ->setMaxResults( $limit );

    foreach ($criteria as $field => $value)
    {
        $q
            ->andWhere(sprintf('u.%s = :%s', $field, $field))
            ->setParameter($field, $value)
        ;
    }

    foreach ($orderBy as $field => $value)
    {
        $q->addOrderBy(sprintf('u.%s',$field),$value);
    }

    try
    {
        $q = $q->getQuery();
        $users = $q->getResult();
        return $users;
    }
    catch(ORMException $e)
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题

1-我可以使用fetch="EAGER"findBy 在一个查询中返回productgroups

2-如果没有,那么我是否使用fetch="EAGER"多对多实体而不会破坏性能

3-覆盖findBy是一个好方法吗?有什么缺点吗?

谢谢,

Uda*_*dan 1

FETCH_EAGER 模式有它的问题。事实上,这里有一个解决此问题的开放请求,但尚未关闭。

我建议使用自定义存储库以您想要的方式获取数据。