ハマログ

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

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日


関連記事

phpMyAdminでDBをインポートしたら画面が真っ白に!!

ローカル環境の「xampp for windows1.8.3」「phpMyadm…

いまどきのPHPのはなし

クライアントの話を聞いているとあまりよい印象を持たれていないPHPですが、ここ数…

マクド

奄美にはマクドナルドがありません。 関東ではマック、関西ではマクドって言いますけ…


← 前の投稿

次の投稿 →