LoginSignup
7
8

More than 5 years have passed since last update.

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

Posted at

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

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

7
8
0

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
  3. You can use dark theme
What you can do with signing up
7
8