我想在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次),如果我有很多计算,它对性能不利。
答案 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
我猜你已经在你的模型中定义了你的关系,所以你不需要在这里重复它。