restore() { return this.dontTouch() .withTrashed() .patch({ [this.modelClass().softDeleteColumn]: null, }); }
updateById(id, fields) { const idColumn = this.modelClass().idColumn; const context = {[idColumn]: id}; return this.mergeContext(context).update(fields).whereComposite(idColumn, id); }
async register() { const knexConfig = this.knexConfig() const knex = Knex(knexConfig) Model.knex(knex) const Contact = require('../orms/models/objection/Contact') this.app.singleton('Objection/Contact', () => { return Contact }) }
static get relationMappings() { const User = require('../users/model'); return { user: { relation: Model.HasOneRelation, modelClass: User, join: { from: 'access_grants.user_id', to: 'users.id' } } } }
softDelete() { return this.dontTouch() .patch({ [this.modelClass().softDeleteColumn]: new Date().toISOString(), }); }
delete() { if (!this.modelClass().softDelete) { return super.delete(); } return this.softDelete(); }
_handleSoftDelete() { const model = this.modelClass(); if (!model.softDelete) return; this.onBuildKnex((knex, builder) => { if ( // don't add soft delete condition to partial queries (inside functions) builder._isPartialQuery || !builder.isFind() || builder.context().withTrashed ) return; const softDeleteColumn = `${model.tableName}.${model.softDeleteColumn}`; // add the deletedAt statement if (builder.context().onlyTrashed) { knex.where(q => q.whereNotNull(softDeleteColumn)); } else { knex.where(q => q.whereNull(softDeleteColumn)); } // push the _ww statement which wraps up the upcoming where condition in brackets // this is done in knex_patch.js knex._statements.push({ grouping: 'where', type: '_ww', }); }); }
save(fields) { const id = this.modelClass().idColumn; if (!(id in fields)) { // modelClass has a generateId function, use that if (this.modelClass().generateId) { fields.id = this.modelClass().generateId(); } return this.insert(fields); } const patchFields = _.assign({}, fields); delete patchFields[id]; const context = {[id]: fields[id]}; return this.mergeContext(context).patch(patchFields).where(id, fields[id]); }
static get relationMappings() { return { emails: { relation: Model.HasManyRelation, modelClass: Email, join: { from: 'contacts.id', to: 'emails.contact_id' } }, phones: { relation: Model.HasManyRelation, modelClass: Phone, join: { from: 'contacts.id', to: 'phones.contact_id' } }, addresses: { relation: Model.HasManyRelation, modelClass: Address, join: { from: 'contacts.id', to: 'addresses.contact_id' } } }; }
static get relationMappings() { const User = require('./User') return { writer: { relation: Model.BelongsToOneRelation, modelClass: User, join: { from: 'messages.user_id', to: 'users.id' } } } }
saveAndFetch(fields) { const id = this.modelClass().idColumn; if (!(id in fields)) { // modelClass has a generateId function, use that if (this.modelClass().generateId) { fields.id = this.modelClass().generateId(); } return this.insertAndFetch(fields); } const patchFields = _.assign({}, fields); delete patchFields[id]; const context = {[id]: fields[id]}; return this.mergeContext(context).patchAndFetchById(fields[id], patchFields); }
static get relationMappings() { const Message = require('./Message') return { messages: { relation: Model.HasManyRelation, modelClass: Message, join: { from: 'users.id', to: 'messages.user_id' } } } }
deleteById(id) { const idColumn = this.modelClass().idColumn; const context = {[idColumn]: id}; return this.mergeContext(context).delete().whereComposite(idColumn, id); }
patchById(id, fields) { const idColumn = this.modelClass().idColumn; const context = {[idColumn]: id}; return this.mergeContext(context).patch(fields).whereComposite(idColumn, id); }