Использование postProcessResponse
приведет к различным проблемам с подкачкой и т. Д.
Вы можете использовать событие start
для изменения каждого запроса:
knex.on('start', function(builder) {
builder.whereNull('date_deleted')
});
knex.select('*')
.from('users')
.then(function(Rows) {
//Only contains Rows where date_deleted is null
});
Но это также весьма подвержено ошибкамНапример, если вы используете .orWhere
в своем запросе или для любого другого запроса, который не является простым, выберите ...
Функция, которую вы ищете, не очень удобна для реализации с knex
. Например, с objection.js
есть гораздо больше вариантов, как это сделать.
Для knex я, вероятно, просто расширил бы конструктор запросов специальной функцией, которая выполняет что-то вроде этого (начиная с knex 0.19.1):
const Knex = require('knex');
Knex.QueryBuilder.extend('selectWithoutDeleted', function(tableName) {
return this
.with('tableWithoutDeleted',
knex(tableName).whereNull('date_deleted')
)
.from('tableWithoutDeleted');
});
const res = await knex.selectWithoutDeleted('table')
.where('col1', 'foo')
.orWhere('col2', 'bar');
Это должно работать теоретически ... CTE сначала ограничивает результаты не содержащими удаленные строки, а остальные условия where
будут применяться к этому ограниченному набору результатов.