Sequelizeを使ってみた
久しぶりにNodeJsでwebアプリを作っています。
完全に趣味で、仕事でやっているわけではありません。
O/Rマッパー的なものを使いたくて、調べていましたが最初に検索で引っかかった「Sequelize」を使ってみました。
インストール方法
npmのパッケージなので、npmインストールしましょう。 ちなみに今回はmysql使うことを想定しています。
|
|
基本的にsequelizeをインストールすればいいのですが、Migration機能も使いたいので今回はsequelize-cliもインストールします。
|
|
初期化を行う
sequelize-cliを使ってmodelsディレクトリの生成やconfigの生成をします。
|
|
これでmodels,migrations,configなどのディレクトリが生成されます。
sequelizeコマンドは他にもマイグレーションやモデルの作成など様々なコマンドがあるのでヘルプコマンドで確認しておきましょう。
|
|
モデルを作ってみる
「テーブル=モデル」という表現は嫌いなんですが、「郷に入っては郷に従え」という事でモデルを作るとあえて言います。
今回はUserモデルと、Organizationモデルを作ります。
|
|
modelsディレクトリにorganization.jsとuser.jsが作成されました。
アソシエーション
アソシエーションも比較的簡単に出来ます。 一般的にある以下のアソシエーションの設定ができます。
- BelongsTo
- HasOne
- HasMany
- BelogsToMany(n:m)
詳しいことはマニュアルを見ましょう。
今回はUserモデルにBelongsToでOrganizationモデルを指定しましょう。
|
|
associateの部分にbelongsToを記述するだけで大丈夫です。
なぜこのような書き方をするのか気になる方はmodels/index.jsのコードを読めば理解できます。
カラムを追加してみる
このアソシエーションは動かないんです・・・
実行してみるとわかるんですが、Unknown column 'OrganizationId' in 'field list'って出てエラーになるんですよ。
まあそりゃそうですよね。Organizationテーブルとどうやってリレーションするのかって話ですよね。
ということでカラムを追加してみましょう。 カラムを追加する際に必要な作業としては以下のとおりです。
- Userモデルの修正
- Migrationの雛形を作成して、変更を記述する
- Migrationの実行
モデルの修正
以下のように修正します。
sequelize.defineでforeignKeyでorganization_idを用意。
そしてassociateの部分でforeignKeyを指定しました。
|
|
Migrationの雛形を作成して、変更を記述する
sequelizeコマンドを使ってmigrationファイルの雛形を生成します。
|
|
そして以下のように変更点を記述します。
|
|
Migrationの実行
ファイルのようにができたら、マイグレーションを実行します。
|
|
これで変更がDBに反映されます。
最後に
Expressとどう組み合わせようという話になってくる気もします。 基本的には以下の方法でプロジェクトの雛形を作る事をおすすめします。
- Express generatorでプロジェク生成
- sequelize initでSequlizeの設定をする
|
|
サンプルもsequelize/express-exampleというのがあるので、確認してみると良いでしょう。