【问题标题】:Symfony 2 DQL querySymfony 2 DQL 查询
【发布时间】:2014-06-19 14:20:01
【问题描述】:

我在 Symfony 2 中有这个查询。它工作得很好,但我想知道是否有可能让一些东西更干净。

我是 Symfony 和 QueryBuilder 的新手,无法使用 queryBuilder 做一些事情。

$em = $this->getEntityManager();
    $query = $em->createQuery(
    'SELECT t '.
    'FROM MyBundle:Task t '.
    'WHERE t.folder IN '.
            '(SELECT f.id '.
            'FROM MyBundle:Folder f '.
            'WHERE f.priority = '.$prio.
            ' AND f.user IN '.
              '(SELECT u.id '.
                'FROM MyBundle:User u '.
                'WHERE u.id ='.$user->getId().'))');

方案很简单 一个用户有很多文件夹,一个文件夹有很多任务,我正在寻找一个用户的所有任务。

非常感谢!

【问题讨论】:

    标签: php symfony doctrine-orm dql


    【解决方案1】:

    你有这三个实体的实体关系吗?如果是的话试试这个

    $em->createQuery('SELECT t FROM MyBundle:Task t'
                    . 'JOIN t.folder f'
                    . 'JOIN f.user u'
                    . 'WHERE u.id=:id')
                    ->setParameter('id', $user->getId());
    

    【讨论】:

    • 非常感谢!我只需要为优先级添加一些间距和一个参数,但它可以工作。
    • 或与建设者$em->createQueryBuilder('t')->join('t.folder', 'f')->join('f.user', 'u')->where('u.id', ':id')->setParameter('id', $user->getId())
    • 我不得不重新排列一下,但多亏了你,我对这种语法有了更多的了解。 where 的正确语法是 where('u.id = :id') 谢谢 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多