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()
或其他帮助方法在一个查询中得到product
它groups
或唯一的方法是编写自定义存储库函数并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 在一个查询中返回product
它groups
2-如果没有,那么我是否使用fetch="EAGER"
多对多实体而不会破坏性能
3-覆盖findBy是一个好方法吗?有什么缺点吗?
谢谢,