douiwn6941 2014-01-25 13:01
浏览 51
已采纳

多个连接不能与createQueryBuilder一起使用

When I use createQuery it works:

$this->getEntityManager()
    ->createQuery(
        'SELECT e FROM CPBundle:Event e, CPBundle:Player p, CPBundle:EventType et
        WHERE e.player = p.id AND e.eventType = et.id';
    )
    ->getResult();

but when I try the same query with createQueryBuilder it doesn't work:

public function findEventsByParams($params)
{
    $qb = $this->getEntityManager()->createQueryBuilder();

    $query = $qb->select('e', 'p', 'et')
        ->from('CPBundle:Event', 'e')
        ->innerJoin('CPBundle:Player', 'p')
        ->innerJoin('CPBundle:EventType', 'et')
        ->where('e.player = p.id')
        ->andWhere('e.eventType = et.id');

    if ($params['username']) {
        $qb->andWhere('p.username = :username')
            ->setParameter('username', $params['username']);
    }

    //TODO: other params

    return $query->getQuery()->getResult();
}

I'm getting this error message:

[Syntax Error] line 0, col 73: Error: Expected Literal, got 'JOIN'

  • 写回答

1条回答 默认 最新

  • doujiao1981 2014-01-25 13:18
    关注

    See this answer: https://stackoverflow.com/questions/17989473/symfony2-doctrine-multiple-joins-returns-error

    public function findEventsByParams($params)
    {
        $qb = $this->getEntityManager()->createQueryBuilder();
    
        $query = $qb->select('e')
            ->from('CPBundle:Event', 'e')
            ->innerJoin('e.player', 'p')
            ->innerJoin('e.eventType', 'et');
    
        if ($params['username']) {
            $qb->andWhere('p.username = :username')
                ->setParameter('username', $params['username']);
        }
    
        //TODO: other params
    
        return $query->getQuery()->getResult();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比