2013-03-31 43 views
1

我有两个实体,Order和Orderline具有一对多的关系。我有一个列表,我只需要订单中的数据,但Doctrine会为每个订单的订单项查询。我没有在查询中加入Orderlines。如何防止学说查询命令行?如何防止在Symfony2中加载相关实体?

查询在控制器中使用:

$query = $em->createQuery("SELECT o FROM SomeBundle:Order o JOIN o.shop s JOIN s.user u WHERE u.id = :user_id AND o.status = :status") 
    ->setParameter('user_id', $user->getId()) 
    ->setParameter('status', 'paid'); 
$orders = $query->getResult(); 

一到多的顺序类注释:

/** 
* @ORM\OneToMany(targetEntity="Orderline", mappedBy="order") 
*/ 
protected $orderlines; 

多到一个注释的订单项目类:

/** 
* @ORM\ManyToOne(targetEntity="Order", inversedBy="orderlines") 
*/ 
protected $order; 

回答

5

使用Doctrine\ORM\Query::HINT_FORCE_PARTIAL_LOAD

0暗示教条
$query = $em->createQuery("SELECT partial o.{id} FROM SomeBundle:Order o JOIN o.shop s JOIN s.user u WHERE u.id = :user_id AND o.status = :status") 
    ->setParameter('user_id', $user->getId()) 
    ->setParameter('status', 'paid'); 

$query->setHint(Doctrine\ORM\Query::HINT_FORCE_PARTIAL_LOAD, 1); 

$orders = $query->getResult(); 

OR

看到这个http://docs.doctrine-project.org/en/2.1/tutorials/extra-lazy-associations.html

+0

谢谢! Hnting解决了我的问题。 – user1995453