Как получить полную обновленную запись в хуке $afterUpdate в моделях возражений?
Я использую Objection.js в качестве моего ORM для простого приложения осадков. Мне нужно иметь возможность динамически обновлять и вводить одну таблицу при обновлении таблиц более низкого уровня. Для этого мне нужна вся запись, которую я обновляю, чтобы я мог использовать эти данные для корректного обновления динамически обновляемой записи.
Я использую $afterUpdate
крюк для записи таблицы нижнего уровня, который. У меня проблема в том, что когда я вхожу this
в пределах $afterUpdate
Подключаемая функция содержит только те части записи, которые я хочу обновить. Как я могу получить всю запись? Я уверен, что смогу получить запись, выполнив дополнительный запрос к БД, но я надеялся, что этого не будет. Любая помощь будет оценена
1 ответ
Я думаю, что сейчас вы можете получить всю модель только с дополнительным запросом. Если вы выполняете обновление с помощью запроса экземпляра ($query), вы можете получить другие свойства из options.old
,
Запрос:
const user = await User.query().findById(userId);
await user.$query()
.patch({ name: 'Tom Jane' })
Крючок:
$afterUpdate(opt, queryContext) {
console.log(opt.old)
}
заплата
Если вам не нужно делать это в хуке, вы можете использовать patch
функция связана с first().returning('*')
чтобы получить всю модель в одном запросе, это более эффективно, чем patchAndFetchById
в postgreSQL. Как указано в документации.
Поскольку PostgreSQL (и некоторые другие) поддерживают возврат цепочки ('*'), вы можете вставить строку или обновить / исправить / удалить существующие строки и получить затронутые строки в качестве экземпляров модели в один запрос, что повышает эффективность. Смотрите примеры для большей ясности.
const jennifer = await Person
.query()
.patch({firstName: 'Jenn', lastName: 'Lawrence'})
.where('id', 1234)
.returning('*')
.first();
Рекомендации: