2015-04-17 4 views
2

У меня есть 2 класса, которые я хочу выбрать из БД, используя 1 запрос в Symfony2 Doctrine.Doctrine select несколько объектов

Первый объект - 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 есть много запросов к БД (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 

Я думаю, вы уже определили свои отношения в вашей модели, так что вам не нужно повторять его здесь.

Смежные вопросы