docs: function softDelete(callback) {
    if(this[this.primaryKey]) {
      flowsync.series([
        (next) => {
          this[symbols.callDeep]("delete", (associationDetails) => {
            return (associationDetails.type !== "belongsTo"
              && associationDetails.dependent === true);
          }, next);
        },
        (next) => {
          let now = new Datetime();
          let attributesToUpdate = {};
          attributesToUpdate[inflect("deletedAt").snake.toString()] = now.toDate();
          this[symbols.getDatabase]()
            .update(attributesToUpdate)
            .into(this.tableName)
            .where(this.primaryKey, "=", this[this.primaryKey])
            .results((error, results) => {
              if(error) {
                next(error);
              } else if (results === 0) {
                next(new Error(`${this.constructor.name} with ${this.primaryKey} ${this[this.primaryKey]} cannot be soft deleted because it doesn't exists.`));
              } else {
                next();
              }
            });
        }
      ], (errors, results) => {
        callback(errors, results);
      });
    } else {
      callback(new Error(`Cannot delete the ${this.constructor.name} because the primary key is not set.`));
    }
  }