ハマログ

株式会社イーツー・インフォの社員ブログ

node.jsフレームワーク「Adonis」(3)

前回はMVCのV(View)とC(Controller)に軽く触れてみましたので、今回はM(Model)です。

と言ってもMVCのM(モデル)については人それぞれいろいろな意見がありますので、「今回はDBを扱うORマッパーを取り上げます。」と言い直します。

Laravelでの「Eloquent ORM」に相当する、「Lucid ORM」がAdonisには存在します。AdonisのTutorialに沿って、Post(投稿)モデルを作成してみます。以下コマンドを実行します。

administrators-MacBook-Air:adonistest2 xxxxxx$ ./ace make:model Post
create: app/Model/Post.js

「app/Model」以下にPostクラスが作成されました。(Laravelと違ってModelディレクトリがあらかじめ存在しています)

'use strict'

const Lucid = use('Lucid')

class Post extends Lucid {

}

module.exports = Post

DB定義を行います。Laravel同様migrationの仕組みを持っていますのでこれで行います。

まず以下コマンドでpostsテーブル作成用のmigrationファイルを作成します。

administrators-MacBook-Air:adonistest2 xxxxxx$ ./ace make:migration posts --create=posts
create: database/migrations/1472777565816_posts.js

作成されたmigrationファイル(database/migrations/1472777565816_posts.js)にテーブル定義を記述していきます。

'use strict'

const Schema = use('Schema')

class PostsSchema extends Schema {

  up () {
    this.create('posts', (table) => {
      table.increments()
      table.string('title')
      table.text('content')
      table.timestamps()
    })
  }

  down () {
    this.drop('posts')
  }

}

module.exports = PostsSchema

作成された雛形に’title’と’content’の定義を追加しました。
内容的にはLaravelのmigrationそっくりなのでLaravelのmigrationの知識ですんなに理解できそうです。

早速migration実行、といきたいところですが、DBの接続設定を確認しましょう。Adonisも.envファイルを使用しており、.envファイルの記述”DB_CONNECTION=sqlite”と、DB設定用ファイルapp/config/database.jsの記述から、デフォルトではSQLiteが使用されることがわかります。

connection: Env.get('DB_CONNECTION', 'sqlite'),

  sqlite: {
    client: 'sqlite3',
    connection: {
      filename: Helpers.databasePath('development.sqlite')
    },
    useNullAsDefault: true
  },
....

今回はお手軽にそのままSQLiteを使用します。

npmからsqliteドライバーをインストールして…

npm i --save sqlite3

migration実行します。

administrators-MacBook-Air:adonistest2 xxxxxx$ ./ace migration:run

テストデータをLaravelのようにseedファイルで挿入してみます。

const Factory = use('Factory')
const Post = use('App/Model/Post')

class DatabaseSeeder {

  * run () {
    for(let i = 1; i <= 3; i++) {
      let data = {
        title: 'タイトル' + i,
        content: 'タイトル' + i + 'の記事内容'
      };
      yield Post.create(data)
    }
  }

}

module.exports = DatabaseSeeder

簡単に投稿データを3件作ってみます。下記コマンドでseed実行。

administrators-MacBook-Air:adonistest2 xxxxxx$ ./ace db:seed
seeded database successfully

…成功のメッセージが出てるのになぜかコマンドから帰ってきません。
Ctrl+Cで終了させましたが何か書き方がまずかったのでしょうか?

SQLiteの中身をコマンドで確認してみます。

administrators-MacBook-Air:adonistest2 xxxxxx$ sqlite3 database/development.sqlite 
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
sqlite> .tables
adonis_schema  posts        
sqlite> select * from posts;
1|タイトル1|タイトル1の記事内容|2016-09-02 11:27:48|2016-09-02 11:27:48
2|タイトル2|タイトル2の記事内容|2016-09-02 11:27:48|2016-09-02 11:27:48
3|タイトル3|タイトル3の記事内容|2016-09-02 11:27:48|2016-09-02 11:27:48
sqlite> 

データは投入されてました。ES6含めもう少し使いこなすには勉強が必要と感じました。

  Shin.A   2016年9月21日


関連記事

Dockerについてあれこれ

最近Dockerでローカル環境を構築したりしてるので、ここまでに調べた事・気づい…

Laravel5.1のリリース

Laravel5.1がリリースされました。PSR-2の採用、イベントブロードキャ…

SQLでinとexistsの話

最近開発した時、sqlも使いました。使った時、inとexistsの区別が分からな…


← 前の投稿

次の投稿 →