带有where子句的别名的Doctrine子字符串字段

时间:2017-07-12 14:31:50

标签: php symfony doctrine-orm doctrine

我有以下查询:

$query = $qb->select($qb->expr()->substring("p.website",1,5).'AS country)
        ->from("AppBundle\Entity\Image" ,"p")
        ->where("p.aktuellste = 1")
        ->andWhere($qb->expr()->in('country',':country'))
        ->setParameter(':country','de')
        ->orderBy('country','DESC')
        ->getQuery();

E.g。我想选择网站substring(1,2)de的所有行。但country条款中WHERE是Doctrine的未知列。抛出以下异常:

  

SQLSTATE [42S22]:未找到列:1054未知列'sclr_0'   'where子句

有趣的是,Doctrine知道country子句中的ORDER BY列。

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

如果要搜索别名列,则需要使用HAVING,因为它位于计算字段上。将它放在WHERE子句中假设您的Image实体中有一个名为country的成员,而不是。{/ p>

$query = $qb
    ->select($qb->expr()->substring('p.website', 1, 5).'AS country')
    ->from('AppBundle\Entity\Image', 'p')
    ->andWhere('p.aktuellste = 1')
    ->andHaving($qb->expr()->in('country', ':country'))
    ->setParameter(':country', 'de')
    ->orderBy('country', 'DESC')
    ->getQuery()
;

有关详细信息,请参阅MySQL Handling of Group By

  

MySQL扩展允许在HAVING子句中使用别名   对于汇总列

答案 1 :(得分:0)

您的查询中存在一些语法错误,但不确定这会解决您的问题。 请试试这个:

console.log($('body').width());
console.log($('body').height());