npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

knex-orm

v1.2.0

Published

Knex-based object-relational mapping for JavaScript.

Downloads

23

Readme

knex-orm

Knex-based object-relational mapping for JavaScript.

Version (npm) Build Status Code Coverage Code Climate Gitter

Introduction

The motivation behind this project is to combine the simplicity of Bookshelf with the power of Knex and modern ECMAScript features.

Knex-ORM aims to provide a wrapper for every significant method of Knex, while keeping the ORM code overhead as low as possible.

Getting started

Installing Knex and at least one of its supported database drivers as peer dependencies is mandatory.

$ npm install knex --save
$ npm install knex-orm --save

# Then add at least one of the following:
$ npm install pg --save
$ npm install mysql --save
$ npm install mariasql --save
$ npm install sqlite3 --save

An instance of the Knex-ORM library can be created by passing a Knex client instance to the entry class.

const knex = require('knex');
const KnexOrm = require('knex-orm');

const Database = new KnexOrm(
  knex({
    client: 'sqlite3',
    connection: {
      filename: './dev.sqlite3',
    },
  })
);

class Employee extends Database.Model {
  static get tableName() { return 'employees'; } // Redundant

  // Specify related Models which can optionally be fetched
  static get related() {
    return {
      company: this.belongsTo('Company'), // No Model cross-referencing
    };
  }
}

class Company extends Database.Model {
  // The 'tableName' property is omitted on purpose, as it gets assigned
  // automatically based on the Model's class name.

  static get primaryKey() { return 'rank'; }

  static get related() {
    return {
      employees: this.hasMany('Employee'),
    };
  }
}

// Register Models to make them relatable without cross-referencing each other
Database.register(Employee);
Database.register(Company);

Examples

Creating and storing a new Model:

const famousCompany = new Company({
  name: 'A Really Famous Company',
  email: '[email protected]'
});

famousCompany.save()
  .then((ids) => {
    // An ordinary response of a Knex 'insert' query
    // (See http://knexjs.org/#Builder-insert)
    console.log(ids);
  });

Modifying an existing Model gathered by a query:

Company.query().where({ email: '[email protected]' }).first()
  .then((company) => {
    // Response of a Knex 'where' query, with results parsed as Models
    // (See http://knexjs.org/#Builder-where)
    console.log(company); // Should be equal with 'famousCompany' (see above)

    company.name = 'The Most Famous Company Ever';
    return company.save();
  })
  .then((rowsCount) => {
    // An ordinary response of a Knex 'update' query
    // (See http://knexjs.org/#Builder-update)
    console.log(rowsCount); // Should be 1
  });

API Reference

Model

Base Model class which should be used as an extension for database entities.

constructor

Creates a new Model instance.

Parameters

  • props Object= Initial properties of the instance. (optional, default {})
  • isNew boolean= True if the instance is not yet stored persistently in the database. (optional, default true)

del

Queues the deletion of the current Model from the database.

  • Throws InexistentDbObjectError

Returns QueryBuilder

fetchRelated

Queues fetching the given related Models of the current instance.

Parameters

  • props ...string Relation attributes to be fetched.

Returns QueryBuilder

save

Queues saving (creating or updating) the current Model in the database.

  • Throws EmptyDbObjectError

Returns QueryBuilder

validate

Validates all the enumerable properties of the current instance.

  • Throws ValidationError

belongsTo

Creates a many-to-one relation between the current Model and a target.

Parameters

  • Target (string|Model) Name or static reference to the joinable table's Model.
  • foreignKey string= Foreign key in this Model.

Returns Relation

blacklistedProps

List of properties which shall not be present in database entities. The blacklist takes precedence over any whitelist rule.

hasMany

Creates a one-to-many relation between the current Model and a target.

Parameters

  • Target (string|Model) Name or static reference to the joinable table's Model.
  • foreignKey string= Foreign key in the target Model.

Returns Relation

hasOne

Creates a one-to-one relation between the current Model and a target.

Parameters

  • Target (string|Model) Name or static reference to the joinable table's Model.
  • foreignKey string= Foreign key in the target Model.

Returns Relation

idAttribute

jsonSchema

JSON Schema to be used for validating instances of the Model. Validation happens automatically before executing queries.

primaryKey

Primary key of the Model, used for instance identification.

query

Returns a new QueryBuilder instance which corresponds to the current Model.

Returns QueryBuilder

tableName

Case-sensitive name of the database table which corresponds to the Model.

whitelistedProps

List of properties which should exclusively be present in database entities. If the list is empty, then every enumerable property of the instance are considered to be database entities.

KnexOrm

Entry class for accessing the functionality of Knex-ORM.

Properties

  • knex Object Knex client corresponding to the ORM instance.

constructor

Creates a new Knex-ORM instance.

Parameters

  • knex Object Knex client instance to which database functions shall be bound.
  • options Object= Additional options regarding ORM.
    • options.convertCase boolean= If set to true, then the ORM will handle letter case conversion for properties automatically (between camelCase and snake_case). (optional, default false)

Model

Base Model class corresponding to the current ORM instance.

register

Registers a static Model object to the list of database objects.

Parameters

  • model Model Model to be registered.

  • name string= Name under which the Model shall be registered.

  • Throws DbObjectAlreadyRegisteredError

Returns Model The Model which was registered.

DbObjectAlreadyRegisteredError

Extends Error

An error which gets thrown when an attempt is made to register a database object multiple times.

Properties

  • name string Name of the database object in question.

EmptyDbObjectError

Extends Error

An error which gets thrown when an attempt is made to store an empty database object.

InexistentDbObjectError

Extends Error

An error which gets thrown when an attempt is made to modify an inexistent database object.

QueryBuilder

Represents a query builder which corresponds to a static Model reference. Inherits every query method of the Knex query builder.

then

Executes the query as a Promise.

Parameters

  • callbacks ...Function Callbacks to be passed to Promise.then().

Returns Promise

toString

Gets the list of raw queries to be executed, joined by a string separator.

Parameters

  • separator string= Separator string to be used for joining multiple raw query strings. (optional, default \n)

Returns string

withRelated

Queues fetching the given related Models of the queryable instance(s).

Parameters

  • props ...string Relation attributes to be fetched.

Returns QueryBuilder

RelationError

Extends Error

An error which gets thrown when a Relation does not behave as expected.

ValidationError

Extends Error

An error which gets thrown when a Model cannot be successfully validated against its JSON Schema.

Properties

  • data ?Object Detailed information about why the validation has failed.