我有一个保存坐标的 location 实体。根据半径,我想获取范围内的所有位置。
我创建了一个函数(后端代码/ Nestjs逻辑,而不是数据库)来计算两个位置之间的距离。如果计算出的距离小于或等于半径,我要选择此位置。
我当前使用此距离计算功能的存储库实现:
-> { only_rental? }
上面显示的示例不起作用。我收到此错误
QueryFailedError:function distanceFromCoordinatesInKilometers(double precision,double 精度,未知,未知)不存在
在函数中添加// ...
import { distanceFromCoordinatesInKilometers } from '../shared/calculations/distanceFromCoordinatesInKilometers';
@EntityRepository(Location)
export class LocationsRepository extends Repository<Location> {
public getLocations({ /* ... */ latitude, longitude, radiusInKilometers }: GetLocationsDTO): Promise<Location[]> {
const query: SelectQueryBuilder<Location> = this.createQueryBuilder('location');
// ....
if(latitude && longitude && radiusInKilometers) {
query.andWhere("distanceFromCoordinatesInKilometers(location.latitude, location.longitude, :latitude, :longitude) <= :radiusInKilometers", {
latitude,
longitude,
radiusInKilometers,
});
}
return query.getMany();
}
}
时出现此错误
参数不支持功能参数。请检查 “距离”参数。
如何在该查询中调用后端代码功能:
?我可以传入变量但不能传入函数吗?
目前,我正在使用Postgres数据库,但是如果有独立的解决方案,那就太好了。
答案 0 :(得分:0)
确定如果要在代码中实现以下内容,则需要先评估函数,然后再将其传递给SQL字符串。很简单:
if(latitude && longitude && radiusInKilometers) {
query.andWhere(`${distanceFromCoordinatesInKilometers(location.latitude, location.longitude, :latitude, :longitude)} <= :radiusInKilometers`, {
latitude,
longitude,
radiusInKilometers,
});
}