A basic ORM-driven user class.

Hierarchy

Implements

Constructors

  • Parameters

    • Optional values: {
          [key: string]: any;
      }

      Pre-fill the model's properties from the given values. Calls boot() under the hood.

      • [key: string]: any

    Returns ORMUser

Properties

awareOfContainerLifecycle: true = ...
bus: Bus<Event>
dirtySourceRow?: QueryRow

Database fields that should be run on the next save, even if the fields are not mapped to members on the model.

firstName?: string

The user's first name.

lastName?: string

The user's last name.

logging: Logging
originalSourceRow?: QueryRow

The original row fetched from the database.

passwordHash: string

The hashed and salted password of the user.

relationCache: Collection<{
    accessor: string | symbol;
    relation: Relation<ORMUser, any, any>;
}> = ...

Cache of relation instances by property accessor. This is used by the @Relation() decorator to cache Relation instances.

scopes: Collection<{
    accessor: string | Instantiable<Scope>;
    scope: ScopeClosure;
}> = ...
subscribers: Collection<BusSubscriber<ModelEvent<ORMUser>>> = ...

Local listeners subscribed to events on this bus.

subscriptions: Collection<BusInternalSubscription> = ...
userId: number

The primary key of the user in the table.

username: string

The unique string-identifier of the user.

uuid: string = ...
with: (keyof ORMUser)[] = []

Relations that should be eager-loaded by default.

CREATED_AT: null | string = 'created_at'

Optionally, the timestamp field set on creation.

UPDATED_AT: null | string = 'updated_at'

Optionally, the timestamp field set op update.

appends: string[] = []

Array of additional fields on the class that should be included in the object serializations.

connection: string = 'default'

The name of the connection this model should run through.

key: string = 'user_id'

The name of the column that uniquely identifies this model.

masks: string[] = []

Array of fields on the class that should be excluded from the object serializations.

populateKeyOnInsert: boolean = false

If false (default), the primary key will be excluded from INSERTs.

table: string = 'users'

The name of the table this model is stored in.

timestamps: boolean = true

If true, the CREATED_AT and UPDATED_AT columns will be automatically set.

Accessors

  • get isDirtyCheck(): ((field: ModelField) => boolean)
  • Protected

    Get a wrapped function that compares whether the given model field on the current instance differs from the originally fetched value.

    Used to filter for dirty fields.

    Returns ((field: ModelField) => boolean)

      • (field: ModelField): boolean
      • Protected

        Get a wrapped function that compares whether the given model field on the current instance differs from the originally fetched value.

        Used to filter for dirty fields.

        Parameters

        Returns boolean

Methods

  • Similar to assumeFromSource, but instead of mapping database fields to model properties, this function assumes the object contains a mapping of model properties to the values of those properties.

    Only properties with @Field() annotations will be set.

    Parameters

    • object: {
          [key: string]: any;
      }
      • [key: string]: any

    Returns Promise<ORMUser>

  • Given a row from the database, set the properties on this model that correspond to fields on that database.

    The row maps database fields to values, and the values are set for the properties that they correspond to based on the model's @Field() annotations.

    Parameters

    Returns Promise<ORMUser>

  • Create the inverse of a one-to-many relation. Should be called from a method on the model:

    Example

    class MyModel extends Model<MyModel> {
    @Related()
    public otherModels() {
    return this.hasMany(MyOtherModel)
    }
    }

    class MyOtherModel extends Model<MyOtherModel> {
    @Related()
    public myModels() {
    return this.belongsToMany(MyModel, 'otherModels')
    }
    }

    Type Parameters

    • T2 extends Model<T2, T2>

    Parameters

    Returns HasMany<ORMUser, T2>

  • Create the inverse of a one-to-one relation. Should be called from a method on the model:

    Example

    class MyModel extends Model<MyModel> {
    @Related()
    public otherModel() {
    return this.hasOne(MyOtherModel)
    }
    }

    class MyOtherModel extends Model<MyOtherModel> {
    @Related()
    public myModel() {
    return this.belongsToOne(MyModel, 'otherModel')
    }
    }

    Type Parameters

    • T2 extends Model<T2, T2>

    Parameters

    Returns HasOne<ORMUser, T2>

  • Initialize the model's properties from the given values and do any other initial setup.

    values can optionally be an object mapping model properties to the values of those properties. Only properties with @Field() annotations will be set.

    Parameters

    • Optional values: {
          [key: string]: unknown;
      }
      • [key: string]: unknown

    Returns void

  • Protected

    Call all local listeners for the given event. Returns true if the propagation of the event should be halted.

    Parameters

    Returns Promise<boolean>

  • Get a query row mapping database columns to values for properties on this model that (1) have @Field() annotations and (2) have been modified since the record was fetched from the database or created.

    Returns QueryRow

  • Fetch a fresh instance of this record from the database.

    This returns a NEW instance of the SAME record by matching on the primary key. It does NOT change the current instance of the record.

    Returns Promise<undefined | Model<ORMUser>>

  • Get the method with the given name from this class, bound to this class.

    Returns

    function

    Parameters

    • methodName: string

    Returns ((...args: any[]) => any)

      • (...args: any[]): any
      • Get the method with the given name from this class, bound to this class.

        Returns

        function

        Parameters

        • Rest ...args: any[]

        Returns any

  • Returns an array of MODEL fields that have been modified since this record was fetched from the database or created.

    Returns string[]

  • Create a new one-to-one relation instance. Should be called from a method on the model:

    Example

    class MyModel extends Model<MyModel> {
    @Related()
    public otherModels() {
    return this.hasMany(MyOtherModel)
    }
    }

    Type Parameters

    • T2 extends Model<T2, T2>

    Parameters

    • related: Instantiable<T2>
    • Optional foreignKeyOverride: "push" | "toJSON" | "awareOfContainerLifecycle" | "key" | "all" | "count" | "pipe" | "touch" | "exists" | "getBoundMethod" | "save" | "subscribe" | "uuid" | "up" | "down" | "isConnected" | "rehydrate" | "delete" | "query" | "relationCache" | "boot" | "getColumn" | "setColumn" | "assumeFromSource" | "assume" | "timestamps" | "qualify" | "qualifyKey" | "keyName" | "toQueryRow" | "dirtyToQueryRow" | "getOriginalValues" | "only" | "isDirty" | "isClean" | "wasChanged" | "getDirtyFields" | "toObject" | "fresh" | "refresh" | "populate" | "is" | "isNot" | "hasOne" | "hasMany" | "belongsToOne" | "belongsToMany" | "getRelation" | "applyScopes" | "onContainerRelease" | "userId" | "username" | "firstName" | "lastName" | "passwordHash" | "getDisplay" | "getUniqueIdentifier" | "getIdentifier" | "verifyPassword" | "setPassword" | "validateCredential" | "dehydrate"
    • Optional localKeyOverride: keyof T2 & string

    Returns HasMany<ORMUser, T2>

  • Create a new one-to-one relation instance. Should be called from a method on the model:

    Example

    class MyModel extends Model<MyModel> {
    @Related()
    public otherModel() {
    return this.hasOne(MyOtherModel)
    }
    }

    Type Parameters

    • T2 extends Model<T2, T2>

    Parameters

    • related: Instantiable<T2>
    • Optional foreignKeyOverride: "push" | "toJSON" | "awareOfContainerLifecycle" | "key" | "all" | "count" | "pipe" | "touch" | "exists" | "getBoundMethod" | "save" | "subscribe" | "uuid" | "up" | "down" | "isConnected" | "rehydrate" | "delete" | "query" | "relationCache" | "boot" | "getColumn" | "setColumn" | "assumeFromSource" | "assume" | "timestamps" | "qualify" | "qualifyKey" | "keyName" | "toQueryRow" | "dirtyToQueryRow" | "getOriginalValues" | "only" | "isDirty" | "isClean" | "wasChanged" | "getDirtyFields" | "toObject" | "fresh" | "refresh" | "populate" | "is" | "isNot" | "hasOne" | "hasMany" | "belongsToOne" | "belongsToMany" | "getRelation" | "applyScopes" | "onContainerRelease" | "userId" | "username" | "firstName" | "lastName" | "passwordHash" | "getDisplay" | "getUniqueIdentifier" | "getIdentifier" | "verifyPassword" | "setPassword" | "validateCredential" | "dehydrate"
    • Optional localKeyOverride: keyof T2 & string

    Returns HasOne<ORMUser, T2>

  • Returns true if the other model refers to the same database record as this instance.

    This is done by comparing the qualified primary keys.

    Parameters

    Returns boolean

  • Returns true if none of the fields on this model have been modified since they were fetched from the database (and all exist in the database).

    Only fields with @Field() annotations are checked.

    Returns boolean

  • Returns true if any of the fields on this model have been modified since they were fetched from the database (or ones that were never saved to the database).

    Only fields with @Field() annotations are checked.

    Returns boolean

  • Get the value of the primary key of this model, if it exists.

    Returns string | number

  • Call the make() method on the global container.

    Type Parameters

    • T

    Parameters

    • target: any
    • Rest ...parameters: any[]

    Returns T

  • Return an object of only the given properties on this model.

    Example

    Assume a is an instance of some model A with the given fields.

    const a = new A({ field1: 'field1 value', field2: 'field2 value', id: 123 })

    a.only('field1', 'id) // => {field1: 'field1 value', id: 123}

    Parameters

    • Rest ...fields: string[]

    Returns QueryRow

  • Populates an instance of the model with the same database fields that are set on this model, with the exclusion of the primary key.

    Useful for inserting copies of records.

    Example

    Assume a record, a, is an instance of some model A with the given fields.

    const a = A.find(123)  // => A{id: 123, name: 'some_name', other_field: 'a value'}

    const b = a.populate(new A) // => A{name: 'some_name', other_field: 'a value'}

    Parameters

    Returns Promise<ORMUser>

  • Given the name of a column, return the qualified name of the column as it could appear in a query.

    Example

    modelInstance.qualify('id')  // => 'model_table_name.id'
    

    Parameters

    • column: string

    Returns string

  • Return the qualified name of the column corresponding to the model's primary key.

    Example

    class A extends Model<A> {
    protected static table = 'table_a'
    protected static key = 'a_id'
    }

    const a = new A()
    a.qualifyKey() // => 'table_a.a_id'

    Returns string

  • Re-load the currently-loaded database fields from the table.

    Overwrites any un-persisted changes in the current instance.

    Returns Promise<void>

  • Persist the model into the database. If the model already exists, perform an update on its fields. Otherwise, insert a new row with its fields.

    Passing the withoutTimestamps will prevent the configured CREATED_AT/UPDATED_AT timestamps from being updated.

    Parameters

    • withoutTimestamps: {
          withoutTimestamps: undefined | boolean;
      } = {}
      • withoutTimestamps: undefined | boolean

    Returns Promise<Model<ORMUser>>

  • Sets a value in the override row and (if applicable) associated class property for the given database column.

    Parameters

    • key: string
    • value: unknown

    Returns ORMUser

  • Protected

    Sets a property on this to the value of a given property in object.

    Parameters

    • thisFieldName: string | symbol
    • objectFieldName: string
    • object: QueryRow

    Returns void

  • Get normalized values of the configured CREATED_AT/UPDATED_AT fields for this model.

    Example

    user.timestamps()  // => {updated: Date, created: Date}
    

    Returns {
        created?: Date;
        updated?: Date;
    }

    • Optional created?: Date
    • Optional updated?: Date
  • Cast the model to the base QueryRow object. The resultant object maps DATABASE fields to values, NOT MODEL fields to values.

    Only fields with @Field() annotations will be included.

    Returns QueryRow

  • Updates the timestamps for this model, if they are configured.

    If the model doesn't yet exist, set the CREATED_AT date. Always sets the UPDATED_AT date.

    Returns ORMUser

  • Returns true if the given field has changed since this model was fetched from the database, or if the given field never existed in the database.

    Parameters

    • field: string

    Returns boolean

  • Find the first instance of this model where the primary key matches key.

    Example

    const user = await UserModel.findByKey(45)
    

    Type Parameters

    • T2 extends Model<T2, T2>

    Parameters

    Returns Promise<undefined | T2>

  • Given the name of a property on the model with a @Field() annotation, return the unqualified name of the database column it corresponds to.

    Parameters

    • modelKey: string

    Returns string

  • Given the name of a column, return the qualified name of the column as it could appear in a query.

    Example

    SomeModel.qualify('col_name')  // => 'model_table_name.col_name'
    

    Parameters

    • column: string

    Returns string

  • Return the qualified name of the column corresponding to the model's primary key.

    Example

    class A extends Model<A> {
    protected static table = 'table_a'
    protected static key = 'a_id'
    }

    A.qualifyKey() // => 'table_a.a_id'

    Returns string

  • Get a new query builder that yields instances of this model, pre-configured with this model's QuerySource, connection, and fields.

    Example

    const user = await UserModel.query<UserModel>().where('name', 'LIKE', 'John Doe').first()
    

    Type Parameters

    • T2 extends Model<T2, T2>

    Returns ModelBuilder<T2>

  • Get the QuerySource object for this model as it should be applied to query builders.

    This sets the alias for the model table equal to the table name itself, so it can be referenced explicitly in queries if necessary.

    Returns QuerySource

  • Sets the fully- and un-qualified canonical resolver strings. Intended for use by the Canonical unit.

    Parameters

    • fullyQualifiedResolver: string
    • unqualifiedResolver: string

    Returns void