2015-04-17 83 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 

我想你已經確定你的關係,你的模型,這樣你就不需要在這裏重複了。