Doctrine2和sql语句

时间:2016-09-18 18:57:56

标签: mysql sql symfony doctrine-orm

我有一个像这样编写的学说查询:

    $qb = $this->createQueryBuilder('u');

    $qb
        ->leftJoin('u.relatedEventTypes', 'relatedEventTypes')
        ->leftJoin('u.relatedGenres', 'relatedGenres')
        ->where(
            $qb->expr()->eq('u.type', ':userType')
        )
        ->setParameter('userType', 'dj')
    ;

我想再添加一个where语句来查找两个坐标之间的距离并操纵该数据。查询如下所示:

    $qb
       ->andWhere(
          '( 6371 * acos( cos( radians(lat_placeholder) ) * cos( radians(lat_placeholder) ) * cos( radians(lng_placeholder) - radians(lng_placeholder) ) +
           sin( radians(lat_placeholder) ) * sin( radians(la t_placeholder) ) ) ) AS distance
           HAVING distance < distanceToTravel_placeholder)'
     ;

我无法找到一种方法来完成这项工作,这意味着我无法弄清楚如何用占位符来编写这个,所以我可以使用来自开头的查询中的变量(例如u.locLat,u。 distanceToTravel等)。有可能吗?

1 个答案:

答案 0 :(得分:1)

我认为学说无法处理acos,cos和radians等所有函数。你应该看看Doctrine DBAL或Doctrine native queries,其中DBAL看起来像PDO,本机查询为你提供了用普通mysql查询填充实体的可能性。