Doctrine选择多个对象

时间:2015-04-17 13:48:06

标签: php mysql symfony doctrine-orm

我想在Symfony2 Doctrine中使用1个查询从DB中选择2个类。

第一个实体是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次),如果我有很多计算,它对性能不利。

1 个答案:

答案 0 :(得分:2)

我猜测是因为您没有发布用户定义,也未发布多项式定义。

我认为你可以用这种方式制作你的DQL:

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

我猜你已经在你的模型中定义了你的关系,所以你不需要在这里重复它。