【问题标题】:Query builder using alias name inside a query在查询中使用别名的查询生成器
【发布时间】:2015-07-06 08:37:51
【问题描述】:

是否可以有这样的查询构建:

    $qb = $this->em->createQueryBuilder();

    $qb->select(
        'af.shortKey as wg, 
        af.id as afId', 
        'afl.name as afName', 
        'l.id as langId') // -> this one
        ->from('DatabaseBundle:ArticleFamily', 'af')
        ->leftJoin('af.articleFamilyLanguages', 'afl')
        ->leftJoin('afl.language', 'l')
        ->where('langId = :languageId') //-> this is causing the problem
        //if i use it like l.id = :languageId is working. But I don't want it like this.
        ->setParameter('languageId', $params['lang']);

我需要这样使用它,因为我在url中传递了一些参数,我不能使用l.id

如果我使用此查询,我会收到以下错误:

执行 'SELECT a0_.short_key AS 时发生异常 short_key0, a0_.id AS id1, a1_.name AS name2, l2_.id AS id3 FROM article_family a0_ LEFT JOIN article_family_language a1_ ON a0_.id = a1_.article_family_id 左连接语言 l2_ ON a1_.language_id = l2_.id 在哪里 id3 = ? ORDER BY name2 ASC LIMIT 10 OFFSET 0' with params [“3”]:

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

id3 实际上应该在哪里l2_.id

【问题讨论】:

    标签: mysql sql symfony doctrine-orm


    【解决方案1】:

    您不能在WHERE 子句中使用字段别名。相反,您可以尝试使用HAVING

    相关 SO 问题/答案:Can you use an alias in the WHERE clause in mysql?

    【讨论】:

    • 很高兴我能帮上忙! ;)
    猜你喜欢
    • 1970-01-01
    • 2015-07-10
    • 2015-12-05
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多