我正在使用Postgres扩展程序' earthdistance'用于纬度/长距离计算。
我也使用Sequelize访问数据库,我想定义一个getter 计算和按一组坐标距离排序的方法。
以下查询正常工作:
SELECT name,
earth_distance(ll_to_earth( 51.5241182, -0.0758046 ),
ll_to_earth(latitude, longitude)) as distance_from_current_location
FROM "Branches"
ORDER BY distance_from_current_location ASC;
我可以使用sequelize.query()来使用它,但我希望将所有模型查询保留为模型的一部分。
如何在模型定义中的getter方法中指定WHERE条件?
谢谢!
答案 0 :(得分:0)
最好的办法是将查询包装在存储过程中,并传入要在where子句中使用的参数。在编译存储过程时,这将比动态SQL执行得更好,在动态SQL中您可以动态生成WHERE子句。
根据需要将任何参数和类型添加到存储过程中,结果将如下所示:
CREATE FUNCTION GetEarthDistance (v_Foo bigint) RETURNS type AS $$
DECLARE
v_Name varchar(256);
BEGIN
SELECT name INTO v_Name,
earth_distance(ll_to_earth( 51.5241182, -0.0758046 ),
ll_to_earth(latitude, longitude)) as distance_from_current_location
FROM Branches
WHERE somecol > v_foo
ORDER BY distance_from_current_location ASC;
RETURN v_Name;
END;
$$ LANGUAGE 'plpgsql';