gpt4 book ai didi

typeorm - 查询构建器中的调用函数

转载 作者:行者123 更新时间:2023-12-03 15:18:04 25 4
gpt4 key购买 nike

我有一个位置实体保存坐标。基于半径,我想获取范围内的所有位置。

我创建了一个函数(后端代码/Nestjs 逻辑,而不是数据库)来计算两个位置之间的距离。如果计算出的距离小于或等于半径,我想选择这个位置。

我当前使用此距离计算功能的存储库实现:

// ...
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();
}
}

上面显示的示例不起作用。我收到这个错误

QueryFailedError: function distanceFromCoordinatesInKilometers(double precision, double precision, unknown, unknown) does not exist



添加 : 时到我收到此错误的功能

Function parameter isn't supported in the parameters. Please check "distance" parameter.



我将如何调用我的后端代码函数 distanceFromCoordinatesInKilometers在那个查询中?我可以传入变量但不能传入函数?

目前我正在使用 Postgres 数据库,但如果有一个独立的解决方案会很棒。

最佳答案

OK 如果您要在代码中实现以下内容,则需要在将其传递给 SQL 字符串之前评估该函数。很简单:

if(latitude && longitude && radiusInKilometers) {
query.andWhere(`${distanceFromCoordinatesInKilometers(location.latitude, location.longitude, :latitude, :longitude)} <= :radiusInKilometers`, {
latitude,
longitude,
radiusInKilometers,
});
}

关于typeorm - 查询构建器中的调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61402314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com