SQL-запрос в методе Sequelize getter

#node.js #postgresql #sequelize.js

#node.js #postgresql #sequelize.js

Вопрос:

Я использую расширение Postgres ‘earthdistance’ для вычисления широты / дальности.

Я также использую Sequelize для доступа к базе данных, и я хочу определить метод получения для вычисления и сортировки по расстоянию от набора координат.

Следующий запрос работает нормально:

 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.запрос (), но я хочу сохранить все запросы модели частью модели.

Как я могу указать, ГДЕ условия внутри метода getter в определении модели?

Спасибо!

Комментарии:

1. Я хочу сделать то же самое в postgres, используя sequelize. Что вы в итоге сделали?

Ответ №1:

Вероятно, лучше всего обернуть запрос в хранимую процедуру и передать аргументы, которые вы хотите использовать в предложении where . Поскольку хранимые процедуры скомпилированы, это будет работать лучше, чем динамический 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';