2015-04-17 79 views
2

我有2个类,我想从数据库中选择使用Symfony2学说1查询。学说选择多个对象

第一个实体是Calculation,第二个是Polynomial。他们有1:1的关系:

/** 
* Acme\UserBundle\Entity\Calculation 
* 
* @ORM\Table(name="Calculation") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\CalculationRepository") 
*/ 
class Calculation { 
    //... 
    /** 
    * @ORM\OneToOne(targetEntity="Polynomial") 
    * @ORM\JoinColumn(name="result_polynomial_id", referencedColumnName="id", nullable=false) 
    **/ 
    private $resultPolynomial; 
    //... 
} 

我有一个查询,返回我一个用户的所有计算:

public function findByUser($user) { 
    return $this->getEntityManager()->createQuery(
       'SELECT c 
       FROM AppBundle:User u 
        JOIN AppBundle:Polynomial p WITH u = p.user 
        JOIN AppBundle:Calculation c WITH p = c.resultPolynomial 
       WHERE u = :user 
       ORDER BY c.id' 
      ) 
      ->setParameter('user', $user) 
      ->getResult(); 
} 

而到了问题...有没有办法让resultPolynomials一个查询中的计算?如果我使用类似SELECT c, c.resultPolynomial我得到错误:

[Semantical Error] line 0, col 12 near 'resultPolynomial 
': Error: Invalid PathExpression. Must be a StateFieldPathExpression. 

如果我用foreach周期所有的计算,以获得他们的resultPolynomials有很多查询到DB(1为每个计算),这是不利于业绩如果我有很多计算。

回答

2

我猜猜你是因为你没有发布你的用户定义或你的多项式定义。

我觉得你可以让你的DQL这样:

SELECT c, p 
FROM AppBundle:User u 
JOIN u.polynomial p 
JOIN p.calculation c 
WHERE u = :user 
ORDER BY c.id 

我想你已经确定你的关系,你的模型,这样你就不需要在这里重复了。