【问题标题】:How to convert this to Doctrine 2 QueryBuilder format?如何将其转换为 Doctrine 2 QueryBuilder 格式?
【发布时间】:2012-05-26 00:00:44
【问题描述】:

我想用 Doctrine 编写嵌套查询;示例 SQL 如下所示:

SELECT * FROM layer WHERE layer.id NOT IN 
               (SELECT task_id FROM users_tasks WHERE user_id = 1) 
AND parent_id IS NOT NULL AND leaf IS TRUE

我在转换 SECOND SELECT 语句时遇到问题。

提前致谢。

我想使用createQueryBuilder 而不是createQuery

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    试试这个:

    1) 创建您的子查询

    $subquery = $this->_em->createQueryBuilder()
        ->select('t.id')
        ->from('yourBundle:Task', 't')
        ->innerjoin('t.user','u')
        ->where('u.id = 1')
        ->getDQL();
    

    2) 创建查询后

    $query = $this->_em->createQueryBuilder();
    $query->select('l')
          ->from('yourBundle:Layer', 'l')
          ->where($query->expr()->notIn('l.id', $subquery))
          ....;
    

    我测试了它,它可以工作:)

    【讨论】:

    • 我想要createQueryBuilder;
    • 我修改查询(详情见上)
    • 遇到了一些问题。我得到 Invalid parameter number: number of bound variables does not match number of tokens at ... 你能检查这段代码,让我知道我哪里出错了。 evernote.com/shard/s338/sh/70b0db2c-a1f8-4c82-ac87-8f6b934be18d/…
    • @RoydonD'Souza 子查询不考虑参数(getDQL),您应该将参数传递给 $qb
    • @a.aitboudad 非常感谢。会这样做。
    猜你喜欢
    • 2020-05-06
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多