bookshelf-factory

0.1.2 • Public • Published

bookshelf-factory


bookshelf-factory is a tool that extends the knex-schemer schema definition format to produce an object containing models for each table defined. Using this tool you can define relationships between models as well as views for specific data. The tool also takes care of withRelated for you and provides a custom getResources function that allows you to combine all of the functionality into 1 function while still allowing you to use knex query functions

  • See the WIKI for full documentation
  • And the Change Log for what's new

Install


npm install -g bookshelf-factory

Usage


// create a database connection config
var config = {
    "client": "mysql",
    "connection": {
        "host": "127.0.0.1",
        "user": "db",
        "password": "password",
        "database": "test",
        "charset": "utf8"
    }
};
 
// require the package passing the config
var factory = require('bookshelf-factory')(config);
 

Basic Example


JavaScript
// create a database connection config
var config = {
    "client": "mysql",
    "connection": {
        "host": "127.0.0.1",
        "user": "db",
        "password": "password",
        "database": "test",
        "charset": "utf8"
    }
};
 
// require the package and pass the db connection config
var factory = require('bookshelf-factory')(config);
var type    = factory.schemer.constants.type;
 
// define a schema in schemer format
// in this example survivor.id has the views extended property that defines
// views that property belongs to. survivor.groups also has the extended
// property belongsToMany and specifies the model to use for the relationship
var schema = {
        survivor: {
            id: {type: type.integer, primary: true, increments: true, views: ['summary']},
            name: {type: type.string, size: 200, views: ['summary']},
            groups: {belongsToMany: 'group', views: ['summary']},
            station_id: {type: type.integer},
            station: {belongsTo: 'station', views: ['summary']}
        },
        group: {
            id: {type: type.integer, primary: true, increments: true},
            name: {type: type.string, size: 100, views: ['summary']},
        },
        group_survivor: {
            survivor_id: {type: type.integer, primary: true},
            group_id: {type: type.integer, primary: true}
        },
        station: {
            id: {type: type.integer, primary: true, increments: true},
            name: {type: type.string, size: 100}
        }
    };
};
 
// call the create function to create all the models
var models = factory.create(schema);
 
// forge the model and get all of its resources
models.survivor.forge().getResources().then(function(results) {
 
    // pretty print the results to the console
    console.log(JSON.stringify(results, null, ' '));
});

Tools


Created with Nodeclipse (Eclipse Marketplace, site)

Nodeclipse is free open-source project that grows with your contributions.

Dependents (1)

Package Sidebar

Install

npm i bookshelf-factory

Weekly Downloads

0

Version

0.1.2

License

MIT

Last publish

Collaborators

  • vbranden