search
LoginSignup
8

More than 5 years have passed since last update.

posted at

Node.js のMVCフレームワーク sails.js (0.10.x) で始めるアプリ開発:ORMで多対多のモデルの定義の仕方 ヽ(゚ー゚*ヽ)(ノ*゚ー゚)ノわぁい

Node.js で簡単にウェブアプリケーションを作成するフレームワーク sails.js を使って「多対多」のモデルを定義する。

:exclamation: sails.jsはアップデート頻度が高い⇒この記事執筆時点と仕様が異なっている可能性があるのでバージョンに注意

この記事の内容をテストした環境

  • node.js 0.10.x
  • sails.js 0.10.x

多対多のモデルをつくる

「ユーザー」と「飲み物」で好きな飲み物を保存できるようにする

  • ユーザーは「ひなた」と「まどか」
  • 飲み物は「Dr. Pepper」と「Coca-Cola」
  • ひなたはDr. Pepperが好きで、まどかは両方好き

ユーザー User.js

ソースコードのひな形を準備する

sails generate api User

models/User.js を次のように変更

User.js
module.exports = {
  attributes: {
    name: 'string',
    favorites: {
      collection: 'Drink',
      via: 'users',
      dominant: true
    }
  }
}

ポイント

  • ユーザーの好きな飲み物を favorites として定義
  • collection として、飲み物のモデル Drink を指定
  • via で Drink.js で定義したプロパティ名を指定
  • dominant ※どちらかにtrueしておく(今回は特に意味は無い)

飲み物 Drink.js

ソースコードのひな形を準備する

sails generate api Drink

models/Drink.js を次のように変更

Drink.js
module.exports = {
  attributes: {
    name: 'string',
    users: {
      collection: 'User',
      via: 'favorites'
    }
  }
}

ポイント

  • この飲み物が好きなユーザーを users として定義
  • collection として、ユーザーのモデル User を指定
  • via で User.js で定義したプロパティ名を指定
  • dominant は無し

実験

とても便利なsails consoleを使用

sails console

でコンソールを起動。ユーザーHinataMadokaを登録

User.create({name:'Hinata'}).exec(console.log)
=> id:1
User.create({name:'Madoka'}).exec(console.log)
=> id:2

飲み物のDr. PepperCoca-Colaを登録、HinataはDr. Pepperが好きで、Madokaは両方好き

Drink.create({name:'Dr. Pepper', users:[1]}).exec(console.log)
=> id:1
Drink.create({name:'Coca-Cola', users:[1, 2]}).exec(console.log)
=> id:2

ヽ(゚ー゚ヽ)(ノ゚ー゚)ノわぁい

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8