Models and documents
A model contains the schema for your data. Models correspond to a table/collection in a database.
Creating a new model
New models should be created in the app/models folder.
You can inherit from the Alchemy.Model class directly, but since the alchemy-skeleton always comes with a base App model that is preferred.
This is how you inherit from the App model.
The name of the new class is taken from the function name.
/**
 * Page model
 *
 * @author   Jelle De Loecker   <jelle@develry.be>
 * @since    0.1.0
 * @version  0.1.0
 * 
 * @param    {Object}   options
 */
var PageModel = Function.inherits('Alchemy.Model.App', function Page(options) {
	Page.super.call(this, options);
});This call to Function.inherits will return the same Page function we can use to add fields & methods to.
If you want to access the class outside of this file, it is also available in Classes.Alchemy.Model.Page
Adding fields to the model schema
We add fields to a model in a constitute function. Functions added like this will also run on child classes.
A new model will always contain an _id, created and updated field by default.
/**
 * Constitute the class wide schema
 *
 * @author   Jelle De Loecker   <jelle@develry.be>
 * @since    0.1.0
 * @version  0.1.0
 */
PageModel.constitute(function addFields() {
	
	// Let's give the page a name
	this.addField('title', 'String');
	
	// And also a body, which should be HTML
	this.addField('body', 'Html');
	
	// We can also define associations like this:
	// (In this case, a `user_id` field will be added to this model's schema)
	this.belongsTo('User');
});Creating new documents
Let's create a new document and save it to the database. Let's get an instance of this model first:
    In this example we use Model.get('Page') because the code is
    not running in any instance context, but normally you should use
    this.getModel('Page')
// Create a new instance of the Page model
// When this code is in an action or any class method,
// you should use `this.getModel('Page')` instead!
var page_model = Model.get('Page');
Now that we have a model instance we can create a document and begin setting the content
var page = page_model.createDocument();
page.title = 'This is my title';
page.body = '<p>This is some html</p>'Just use the save() method to store it in the database. It returns a promise:
await page.save();
Finding documents
Now that we have stored a single document, we can go look for it. In order to find a single document you can do this:
var page = await page_model.find('first');
We can also use a criteria when we want to add some conditions:
// A `find()` with no arguments returns a criteria
var criteria = page_model.find();
criteria.where('title').contains('is my');
// And then find it
page = await page_model.find('first', criteria);