Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Doctrine2和where sql语句_Mysql_Sql_Symfony_Doctrine Orm - Fatal编程技术网

Mysql Doctrine2和where sql语句

Mysql Doctrine2和where sql语句,mysql,sql,symfony,doctrine-orm,Mysql,Sql,Symfony,Doctrine Orm,我有一个条令问题是这样写的: $qb = $this->createQueryBuilder('u'); $qb ->leftJoin('u.relatedEventTypes', 'relatedEventTypes') ->leftJoin('u.relatedGenres', 'relatedGenres') ->where( $qb->expr()->eq('u.

我有一个条令问题是这样写的:

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

    $qb
        ->leftJoin('u.relatedEventTypes', 'relatedEventTypes')
        ->leftJoin('u.relatedGenres', 'relatedGenres')
        ->where(
            $qb->expr()->eq('u.type', ':userType')
        )
        ->setParameter('userType', 'dj')
    ;
    $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)'
     ;
我想再添加一个where语句,用于查找两个坐标之间的距离并处理该数据。查询如下所示:

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

    $qb
        ->leftJoin('u.relatedEventTypes', 'relatedEventTypes')
        ->leftJoin('u.relatedGenres', 'relatedGenres')
        ->where(
            $qb->expr()->eq('u.type', ':userType')
        )
        ->setParameter('userType', 'dj')
    ;
    $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)'
     ;
$qb
->在哪里(
'(6371*acos(弧度(纬度占位符))*cos(弧度(纬度占位符))*cos(弧度(纬度占位符)-弧度(纬度占位符))+
sin(弧度(纬度占位符))*sin(弧度(纬度占位符)))作为距离
具有距离

我找不到一种方法来实现这一点,这意味着我不知道如何使用占位符来编写它,这样我就可以从一开始就使用查询中的变量(例如u.locLat、u.distanceToTravel等)。有可能吗?

我认为条令无法处理所有的功能,如acos、cos和弧度。您应该看看条令或条令,其中DBAL看起来像PDO,本机查询为您提供了用普通mysql查询填充实体的可能性

你应该先在
和where
方法中删除
LIMIT
ORDER BY
。我刚才使用了原始sql查询,当然LIMIT和ORDER BY语句不属于那里,但我认为这会使我的问题更精确。在andWhere语句中,它的纯sql和sql支持所有这些函数。问题是,是否可以用占位符在条令中编写它。sql确实支持这些函数,但DQL不寻求参考