sqlite-orm
v0.2.4
Published
the ORM framework for sqlite
Downloads
15
Readme
sqlite-orm
the ORM framework for sqlite
Install
$ npm install --save sqlite-orm
Usage
The coffeescript sample code
Mapper = require 'sqlite-orm'
path = require 'path'
Migration = Mapper.Migration
ModelBase = Mapper.ModelBase
Migration.createTable 'ParentModel', (t) ->
t.addColumn 'name', 'TEXT'
Migration.createTable 'ChildModel', (t) ->
t.addColumn 'name', 'TEXT'
t.addReference 'parentModelId', 'ParentModel'
class ChildModel
ModelBase.includeInto this
constructor: (params) -> @initModel params
@initAssos: ->
@belongsTo ParentModel
class ParentModel
ModelBase.includeInto this
constructor: (params) -> @initModel params
@initAssos: ->
@hasOne ChildModel
mapper = new Mapper path.resolve(__dirname, 'test.db')
mapper.sync()
The corresponding javascript code.
var Mapper = require('sqlite-orm');
var Migration = Mapper.Migration;
var ModelBase = Mapper.ModelBase;
var path = require('path');
Migration.createTable('ParentModel', function(t) {
t.addColumn('name', 'TEXT');
});
Migration.createTable('ChildModel', function(t) {
t.addColumn('name', 'TEXT');
t.addReference('parentModelId', 'ParentModel');
});
function ParentModel(params) {
this.initModel(params);
}
ModelBase.includeInto(ParentModel);
function ChildModel(params) {
this.initModel(params);
}
ModelBase.includeInto(ChildModel);
ParentModel.initAssos(function() {
ParentModel.hasOne(ChildModel);
});
ChildModel.initAssos(function() {
ChildModel.belongsTo(ParentModel);
});
mapper = new Mapper(path.resolve(__dirname, 'test.db'));
mapper.sync().then(function() {
});
More sample can refer to below sites:
API
Mapper
sync
function()
synchronize the model definition and the database- return:
Promise
- return:
close
function()
close the database- return:
Promise
- return:
beginTransaction:
function()
begin the transaction.endTransaction:
function()
end the transaction.scopeTransaction:
function(callback)
make the callback invoke in the transaction, after this callback complete,endTransaction
will invoke automatically.@Migration
Migration
get the Migration class@ModelBase
ModelBase
get the ModelBase class@INTEGER
String
the INTEGER data type@REAL
String
the REAL data type@TEXT
String
the TEXT data type@BLOB
String
the BLOB data typeDATETIME
String
the Date date type. If declareDATETIME
, then the type of this attribute will beDate
.BOOL
String
the Bool date type.
Migration
@createTable:
function(tableName, callback)
create the database tabletableName:
String
callback:
function(tableInfo)
create the columns in this callback- tableInfo:
TableInfo
the class to create the columns and index
- tableInfo:
@clear:
function()
clear the table definition
TableInfo
addColumn:
function(name, type, opts)
add the table columnname:
String
the column nametype:
String
the column data type, such asINTEGER
orTEXT
opts:
Object
the column options
createIndex:
function(indexName, columns)
add index for the specific column- indexName:
String
the index name. - columns:
Array
each item of columns is the column name that need index.
- indexName:
addReference:
function(name, tableName, opts)
add foreign keyname: the column name that need index
tableName: the name of table that the index will point to
opts:
Object
the index options
ModelBase
@initAssos:
function()
declare the associationall the subclass must implement this interface to declare the association
@hasOne:
function(ChildModel, opts)
declare this Model has one child ModelChildModel:
ModelBase
orString
the child Model class or class name.opts:
Object
the options used for hasOne association- as:
String
(optional) the property name to refer to the ChildModel instance, the default value is "#{childModel}". e.g. ChildModel is 'ChildModel', then the as value ischildModel
- as:
@hasMany:
function(ChildModel, opts)
declare this Model has many children.ChildModel:
ModelBase
orString
the child Model class or class name.opts:
Object
the options used for hasOne association- as:
String
(optional) the property name to refer to the ChildModel instances, the default value is "#{childModels}". e.g. ChildModel is 'ChildModel', then the as value ischildModels
- as:
@hasManyBelongsTo:
function(TargetModel, opts)
declare this Model and the target Model is N-N connection. The description of this connection can refer to rails association guideTargetModel:
ModelBase
orString
the target Model class or class name.opts:
Object
the options used for this association.- midTableName:
String
the reference table name. - sourceThrough:
String
the column foreign key name that refer the Model. - targetThrough:
String
the column foreign key name that refer the TargetModel. - as:
String
just like@hasMany
or@hasOne
- midTableName:
@belongsTo:
function(ParentModel, opts)
declare this Model is member of ParentModelParentModel:
ModelBase
orString
the parent Model class or class name.opts:
Object
the options used for hasOne associationthrough:
String
(optional) the column name that used for foreign key, the default value is "#{ParentModel}#{primaryKey}". e.g. ParentModel name is 'ParentModel', primaryKey is 'id', then the foreign key isparentModelId
.as:
String
(optional) the property name to refer to the ParentModel instance, the default value is "#{ParentModel}". e.g. ParentModel is 'ParentModel', then the as value isparentModel
@new:
function(obj)
create a new model object, not saved into databaseobj:
Object
the attributes list@create:
function(obj)
just like@new
, but save into database@drop:
function()
drop the table@destroy:
function()
destroy this model object and delete the db row.@find:
function(where, opts)
find the object that match thewhere
statement@findAll:
function(where, opts)
find all of object match the condition
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using gulp.
License
Copyright (c) 2015 liuxiong. Licensed under the MIT license.