2017-03-12 8 views
0
使用

技術:のNode.js、Express.js、Sequilize.jsSequilize.js - 協会、2つのテーブル

私は2つのテーブルを接続しようとしています。 userテーブルとcolorテーブルがあります。

color

Aはuserに属し、userは色を有することができます。

マイファイル構造:私はこれらのファイルを設定するところ

module.exports = function(sequelize, DataTypes) { 
    return sequelize.define('color', { 
     color: { 
      type: DataTypes.STRING, 
      allowNull: false 
     } 
    }); 
}; 

が続いdb.jsで、これは次のとおりです:私のcolor.jsファイルで

module.exports = function(sequelize, DataTypes) { 
    return sequelize.define('user', { 
     /* attributes, such as: username */ 
    }); 
}; 

:私のuser.jsファイルで

My Project 
|__config 
    |__db.js 
|__models 
    |__user.js 
    |__color.js 
|__routes 
    |__index.js 
|__app.js 

const db = {}; 

db.sequelize = sequelize; 
db.Sequelize = Sequelize; 

db.user = sequelize.import('../models/user.js'); 
db.color = sequelize.import('../models/color.js'); 


db.color.belongsTo(db.user); 
db.user.hasOne(db.color); 

module.exports = db; 

ここで問題が始まります。新しいuserアカウントを(POSTリクエストを使用して)作成する場合は、colorも選択する必要があります。したがって、ユーザー情報はuserテーブルに入り、色情報はcolorテーブルに入りますが、どうすればいいですか?作成フェーズでこれらの2つのテーブルをリンクするにはどうすればいいですか?以下は私がこれまで持っていたものです。

私のPOSTリクエストは私のindex.jsファイルにこのようなものです:テーブルを作成する

const express = require('express'); 
const router = express.Router(); 
const db = require('../config/db'); 

router.post('/createNewUser', function(req, res) { 
    const username = req.body.username 
    const color = req.body.color 

    db.user.create({ 
     username: username 
     color: color 
    }, { 
     include: db.color 
    }).then(function(result) { 
     //do something 
    }).catch(function(err) { 
     //in case of error 
    }); 
}); 

が正常に動作します(ここでは含まれていないすべてのこと設定コードは、app.jsファイルです)。テーブルが作成されます。ユーザ名はuserテーブルに置かれると色がcolorテーブルに配置されますが、colorテーブル内userIDnull.

答えて

0

オーケー問題解決です。私は、新しいユーザーや色を作成する場合は、それは次のようになります。

router.post('/createNewUser', function(req, res) { 
    const username = req.body.username 
    const color = req.body.color 

    db.color.create({ 
     color: color 
     user: { 
      username: username 
     } 
    }, { 
     include: [db.color] 
    }).then(function(result) { 
     //do something 
    }).catch(function(err) { 
     //in case of error 
    }); 
}); 

これは、一緒に2つのテーブルをリンクします。テーブルのcolorテーブルに自動的に列が作成されます。この値は、テーブルuseridと同じ値になります。