我有 2 个类,我想使用 Symfony2 Doctrine 中的 1 个查询从数据库中选择。
第一个实体是Calculation
的,第二个是Polynomial
的。他们有 1:1 的关系:
/**
* AcmeUserBundleEntityCalculation
*
* @ORMTable(name="Calculation")
* @ORMEntity(repositoryClass="AppBundleEntityCalculationRepository")
*/
class Calculation {
//...
/**
* @ORMOneToOne(targetEntity="Polynomial")
* @ORMJoinColumn(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();
}
对于问题...有没有办法在一个查询中获取计算的结果多项式?如果我使用类似SELECT c, c.resultPolynomial
的东西,我会得到错误:
[Semantical Error] line 0, col 12 near 'resultPolynomial
': Error: Invalid PathExpression. Must be a StateFieldPathExpression.
如果我使用循环所有计算来获得其结果多项式foreach
则对数据库有很多查询(每个计算 1),如果我有很多计算,则对性能不利。
我猜是因为您没有发布您的用户定义或多项式定义。
我认为你可以这样制作你的 DQL:
SELECT c, p
FROM AppBundle:User u
JOIN u.polynomial p
JOIN p.calculation c
WHERE u = :user
ORDER BY c.id
我想你已经在模型中定义了你的关系,所以你不需要在这里重复它。