This repository has been archived by the owner on Sep 22, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
FAQ
Sozonov edited this page Dec 24, 2018
·
2 revisions
Гайдлайны по работе с ORM:
-
все что касается изменения данных в БД должно быть вынесено сразу в ORM, если это 2-3 или больше изменений
-
в ORM все модифицирующие кастомные методы, должны дожидаться записи в БД
-
когда вы делаете много модификаций, надо по возможности дожидаться их параллельно -- то есть собирать все в массив промисов
-
когда происходит несколько модификаций, то надо их все обрачивать в this.batch (если вы в ORM), либо batchModel, если вы в компоненте реакта. Для того, чтобы каждая модификация не триггерила перерендеринг всех компонент, где эти данные используются
-
model.set - заменяет объект целиком
// НЕВЕРНО!
model.set('users.${id}', {...user, score: 13}) // неверно, так как присваивание set происходит по ссылке
// ВЕРНО
model.set('users.${id}.score', 13) - если изменить нужно только одно поле
model.setDiffDeepAsync(`users.${id}`, {score: 13, name: 'Ivan'}) - если полей несколько
- Нельзя напрямую менять данные в документе и в scope моделе.
// НЕВЕРНО!
game.title = 'New title'
game.players = 10
$game.setDiffDeepAsync(game)
// ВЕРНО, но некрасиво
game = _.cloneDeep(game)
game.title = 'New title'
game.players = 10
$game.setDiffDeepAsync(game)
// ВЕРНО
$game.setEachAsync('', {
title: 'New title',
players: 10
})