1.0.1 • Published 6 years ago

egg-toshihiko v1.0.1

Weekly downloads
2
License
MIT
Repository
github
Last release
6 years ago

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.

NPM version Build Status Build status Test coverage David deps Known Vulnerabilities npm download

Installation

$ npm install --save egg-toshihiko
$ npm install --save mysql2

Usage & 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',
    },
  },
};

config/plugin.js

exports.toshihiko = {
  enable: true,
  package: 'egg-toshihiko'
};

Model Files

Please put models under app/model directory.

Model FileClass Name
user.jsapp.model.User
person.jsapp.model.Person
user_group.jsapp.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.

License

MIT