Поддержка транзакционных изменений данных
Поддержка отправки нескольких объектов модели для сохранения изменений в одной транзакции реализована через метод batchUpdate
объекта store
. Для получения актуального состояния объектов данных с учётом логики бизнес-серверов и триггеров базы данных для каждого запроса INSERT, UPDATE, DELETE отправляется дополнительный SELECT на изменяемые сущности.
Пример использования:
const store = this.get('store');
const models = [
store.createRecord('user', { name: 'Nif' }),
store.createRecord('user', { name: 'Naf' }),
store.createRecord('user', { name: 'Nuf' }),
];
store.batchUpdate(models).then((models) => {
const [nif, naf, nuf] = models;
});
Вычитка данных при помощи Batch
Вычитка данных с помощью Batch может быть полезна в разных случаях. Например, если нужно загрузить несколько моделей разных типов одним запросом. Также если из-за сложных фильтров url запроса получается слишком длинный, то такой запрос может быть выполнен с помощью batchSelect
.
Пример использования:
const builder = new QueryBuilder(store)
.from('ember-flexberry-dummy-application-user')
.select('id, name')
.where('name', '==', 'Vasya');
const builder2 = new QueryBuilder(store)
.from('ember-flexberry-dummy-suggestion')
.select('id, text')
.where('text', '==', 'Test suggestion');
const queries = [builder.build(), builder2.build()];
store.batchSelect(queries);
В результате будет два массива. В первом все модели ember-flexberry-dummy-application-user
с полем name
равным Vasya
. Во втором модели ember-flexberry-dummy-suggestion
, у которых text
равно Test suggestion
.