BaseModel
SQLite ORM & Inheritance Functions for Titanium
Boydlee Pollentine / @boydleep
Accenture, Bangalore
Structure of a Model
On Initialisation:
- Creates all of the objects required by the Model locally
- Requires and sets Utilities, Database, Validation & Sync Libs
- Fetches the associated table info via the Database.describeTableReader() function
- Assigns the Model's columns Array and primary key properties based on information from describeTableReader()
- Auto-assigns foreign keys to the foreignKeys Array if requested
- Instantiates and performs a login check to the SyncAdapter library.
Creating a New Model
var table = "my_sqlite_table";
var _init = require("BaseModel"),
Model = new _init.Model(table);
exports.Model = Model;
Extending a Model
var table = "my_sqlite_table";
var _init = require("BaseModel"),
Model = new _init.Model(table);
Model.myCustomFunction = function() {
var newRecord = this.newRecord();
newRecord.dateRightNow = new Date();
return newRecord;
};
exports.Model = Model;
Fetching A Record
var ContactModel = AppEngine.loadModel('contactModel');
//this wraps: require('/sqlModels/contactModel').Model; var myRecord = ContactModel.fetchByPrimaryKey('123456');
Ti.API.info(myRecord);
//is a proper JavaScript object{id: "123456", firstname: "Boydlee",lastname: "Pollentine",gendercode: 1,fullname: "Boydlee Pollentine",address1_line1: "5 Rigbys Court",address1_city: "Norwich",.......... }
Fetching Multiple Records
var allRecords = ContactModel.fetchAll();
Ti.API.info(allRecords);
//is JavaScript Array of Objects[{ id: "123456", firstname: "Boydlee", lastname: "Pollentine", gendercode: 1,fullname: "Boydlee Pollentine" .......... },{ id: "9032190", firstname: "Harry", lastname: "Styles", .... },{ id: "9032190", firstname: "Barry", lastname: "Johnson", .... },{ id: "9032190", firstname: "Margeret", lastname: "Braithwaite", .... }]
var _query = "SELECT * FROM contact WHERE city = 'Norwich';
var someRecords = ContactModel.fetchAllBySqlQuery(_query);
//returns a sqlite result set//use the second optional parameter (BOOLEAN) to objectify the results//e.g. ContactModel.fetchAllBySqlQuery(_query, true); //objectifies results to JS
Creating a New Record
var newRecord = ContactModel.newRecord();
Ti.API.info(newRecord);
//is JavaScript Object that has a set of pre-defined object properties which match//those of the table in the database{ id: "123456",firstname: "",lastname: "",gendercode: 1, //will pre-fill if DEFAULT Value existsfullname: "Boydlee Pollentine"..........}
Inserting a New Record
var newRecord = ContactModel.newRecord();
newRecord.firstname = 'John';
newRecord.lastname = 'Smith';
newRecord.gendercode = 1;
//etc etc....
ContactModel.insert(newRecord);
//primary keys are auto-generated as GUID's if not provided
Updating a Record
var newRecord = ContactModel.newRecord();
newRecord.firstname = 'John';
newRecord.lastname = 'Smith';
newRecord.gendercode = 1;
//etc etc....
ContactModel.insert(newRecord);
//primary keys are auto-generated as GUID's if not provided
newRecord.firstname = 'Barry';
ContactModel.update(newRecord);
Objectify()
Reads in the table column names and database record,
mapping each SQLite resultset column to a JavaScript object property.
E.g. a table/recordset with the columns "id", "name" and "gender" will get mapped to a JavaScript object that looks like:
{
id: 1,
name: "Boydlee",
gender: "M"
} If there is more than 1 row in the SQLite result set, objectify() will produce an Array of objects instead.
BaseModel
By boydlee
BaseModel
- 1,602
