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不寻求参考