Sequelize getter方法中的SQL查询

时间:2014-06-28 17:50:49

标签: node.js postgresql sequelize.js

我正在使用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条件?

谢谢!

1 个答案:

答案 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';