Кто-нибудь может подсказать, как настроить реляционную схему и выполнить соединения в sails.js?
Как выполнять соединения и отношения SQL в Sails.js и Waterline?
Ответы (2)
Ассоциации официально поддерживаются в Waterline
Обзор
С Sails и Waterline вы можете связать модели из нескольких хранилищ данных. Это означает, что даже если ваши пользователи живут в PostgreSQL, а их фотографии — в MongoDB, вы можете взаимодействовать с данными так, как если бы они жили вместе в одной базе данных. У вас также могут быть ассоциации, охватывающие разные соединения (например, хранилища данных/базы данных) с использованием одного и того же адаптера. Это удобно, если, например, вашему приложению необходимо получить доступ к устаревшим данным рецептов, хранящимся в базе данных MySQL в центре обработки данных вашей компании, или обновить их, а также сохранить или получить данные об ингредиентах из совершенно новой базы данных MySQL в облаке.
Поддерживаемые типы ассоциаций
Запланированные типы ассоциаций
Исходное сообщение
Я автор Waterline, ORM, используемого в Sails. Waterline — это совершенно новый продукт, и мы постоянно добавляем новые функции. В настоящее время у нас нет поддержки ассоциаций, но это следующее в дорожной карте. Мы разработали API для ассоциаций, который, я думаю, понравится большинству людей. Вы можете просмотреть текущую работу и предлагаемый API по адресу: [Proposed Sails Associations API][1].
Далее мы собираемся заняться ассоциациями и транзакциями и надеемся, что они будут готовы в следующем месяце или около того.
В то же время, если вы используете адаптеры MySQL или PostgreSQL, они оба предоставляют необработанный метод
.query()
, который позволяет вам передать созданный вручную SQL-запрос и выполнить его. Я полностью понимаю, что это не идеально, но должно позволить вам продолжать создавать свое приложение, пока мы получаем поддержку ассоциаций и объединений.Сигнатура функции для метода запроса:
Model.query(<sql query>, <optional data>, callback);
Model.query
?
- person Johan Dettmar; 20.11.2013
var instance = User._model(values)
- person particlebanana; 15.01.2014
SELECT p.id, p.name, count(c.id) FROM parent p JOIN child c ON c.parent_id=p.id GROUP BY p.id
- person Crusader; 21.09.2016
Пример с частицей банана работает, но на самом деле должен использовать «новый», например «var instance = new User._model(values)». Я использую следующий код, и он работает.
Accounts.query(query, function(err, accounts) {
if (err)
return fn(err);
accounts = _.map(accounts, function(account) {
return new Accounts._model(account);
});
fn(null, accounts);
});
new Accounts._model()
не выполняется ввод-вывод, поэтому он не блокируется и ничего не выиграет от асинхронности.
- person Dave; 21.03.2014