egg-toshihiko v1.0.1
egg-toshihiko
Yet another ORM called Toshihiko plugin for egg.
NOTE: This plugin just for integrate Toshihiko into Egg.js, more documentation please visit http://github.com/XadillaX/Toshihiko.
Installation
$ npm install --save egg-toshihiko
$ npm install --save mysql2Usage & Configuration
config/config.default.js
exports.toshihiko = {
database: '',
host: 'localhost',
port: 3306,
username: 'root',
password: '',
connections: {
default: {
database: 'egg-toshihiko',
host: 'localhost',
port: 3306,
username: 'root',
password: '',
},
noBase: {
database: 'mysql',
},
},
};exports.toshihikomay contain the default configuration of Toshihiko. (refs: http://docs.toshihikojs.com/en/latest/docs/getting-started/#setting-up-a-connection)exports.toshihiko.connectionsis an object that contains one or several connection configurations. The configuration will combine with default configuration.
config/plugin.js
exports.toshihiko = {
enable: true,
package: 'egg-toshihiko'
};Model Files
Please put models under app/model directory.
| Model File | Class Name |
|---|---|
| user.js | app.model.User |
| person.js | app.model.Person |
| user_group.js | app.model.UserGroup |
Defining a Model
When define a model, you should get a toshihiko connection first.
app.toshi or app.toshihiko equals to require('toshihiko').Toshihiko.
And an extra function app.toshi.get(CONN_NAME) returns a toshihiko connection
with name CONN_NAME.
You may use a connection to define a model. e.g.
const conn = app.toshi.get('conn');
const User = conn.define('users', [
...
]);And you can also define a model via default connection by calling
app.toshi.define(). e.g.
const User = app.toshi.define('users', [
...
]);Types
In package Toshihiko, the types that be used in defining are in
require('toshihiko').Type. Here in egg-toshihiko, you may access types
directly in app.toshi. e.g.
app.toshi.String;
app.toshi.Json;
app.toshi.Integer;
...Example
Define a model first:
// app/model/user.js
module.exports = app => {
const User = app.toshi.define('users', [
{ name: 'id', type: app.toshi.Integer, primaryKey: true },
{ name: 'username', type: app.toshi.String },
]);
User.test = function() {
return 'hello';
};
return User;
};Now you can use it in your controller:
// app/controller/users.js
module.exports = app => {
return class UsersController extends app.Controller {
async show() {
const user = await this.ctx.model.User.findById(this.ctx.params.id);
this.ctx.body = user;
}
async create() {
this.ctx.body = await app.model.User.build({
username: this.ctx.request.body.username,
}).save();
}
};
};Questions & Suggestions
Please open an issue here.