質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

6380閲覧

sequelizeでモデル定義変更時にデータベースの定義が更新されない

退会済みユーザー

退会済みユーザー

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2016/06/02 11:07

Node.jsのライブラリsequelizeを用いて開発をしています。
sequelizeのモデルを作成する際に、

// DB接続等 var user = db.define('user',{ name: { type:sequelize.STRING, unique:true, allowNull:false}, password: { type:sequelize.STRING(1000), allowNull:false}, }) user.sync()

のようなコードを書いていますが、この状態で例えばuserにisAdminなどのカラムを追加する時に

// DB接続等 var user = db.define('user',{ name: { type:sequelize.STRING, unique:true, allowNull:false}, password: { type:sequelize.STRING(1000), allowNull:false}, isAdmin: sequelize.BOOLEAN, }) user.sync()

のように書くと思うのですが、これだとMySQL側のテーブル定義が更新されず、isAdminをプログラム内で使ってデータベースに反映させようとするとエラーが出てしまいます。
どのようにしたらモデルにカラムを追加した場合にテーブル内のデータを消さずにテーブル定義を更新できるでしょうか?
Node.js:v6.2.0
sequelize:v3.23.3
です。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Sequelizeにはsequelize-cliというマイグレーション用のツールがあります。

これを使ってまず下記のようにマイグレーションファイルを作ります。

bash

1> npm i sequelize-cli -D 2> $(npm bin)/sequelize migration:create --name addIsAdminColumnToUser

生成されたファイルを開いてupとdownを自分で定義します。

javascript

1'use strict'; 2module.exports = { 3 4 up: function(queryInterface, Sequelize) { 5 return queryInterface.addColumn('users', 'isAdmin', { 6 type: Sequelize.BOOLEAN, 7 allowNull: false, 8 defaultValue: false, 9 }); 10 }, 11 12 down: function(queryInterface, Sequelize) { 13 return queryInterface.removeColumn('users'); 14 } 15 16};

それからマイグレーションを実行すると isAdmin カラムがデータベースに追加されます。

bash

1> $(npm bin)/sequelize db:migrate

こうしておくと単にカラムを追加するだけでなく、スキーマのロルバックなど履歴の管理もできるので便利です。

投稿2016/06/03 07:46

nukosuke

総合スコア145

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

sequelizeというライブラリは使ったことがないので詳しいことはわかりませんが、
ここを見たら有ると思います。おそらくやりたいことはaddColumnというメソッドかと。

http://sequelize.readthedocs.io/en/latest/docs/migrations/

投稿2016/06/03 00:38

masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問