2017-01-03 10 views
0

belongsToの関連付けを作成するCLI私は
、私の特定のケースに団体が、何について多くのことを発見した私はいくつかのモデルを作成し、私はそれらを関連付けるためにしようとしている、
ので、私はそれが理解の問題だと思いますデータベースモデリングも。Sequelizeユーザーやスタッフ

私はモデルのユーザーとスタッフを持っており、どちらも属性user_idを共有しています。

user.jsの

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define('User', { 
    user_id: DataTypes.STRING, 
    fullname: DataTypes.STRING, 
    username: DataTypes.STRING, 
    comment: DataTypes.TEXT 
    }, { 
    classMethods: { 
     associate: function(models) { 
     // associations can be defined here 
     User.hasMany(models.Sshkey, {foreignKey: 'sshkey_id'}) 
     } 
    } 
    }); 
    return User; 
}; 

staff.js

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var Staff = sequelize.define('Staff', { 
    user_id: DataTypes.STRING, 
    fullname: DataTypes.STRING, 
    username: DataTypes.STRING, 
    password: DataTypes.STRING, 
    isAdmin: DataTypes.BOOLEAN 
    }, { 
    classMethods: { 
     associate: function(models) { 
     // associations can be defined here 
     Staff.hasMany(models.Sshkey, {foreignKey: 'sshkey_id'}) 
     } 
    } 
    }); 
    return Staff; 
}; 

と私は、ユーザーやスタッフのいずれかに属することができモデルSSHKEYを持っています。
私はSequelize cliを使用していますが、まだ移行を行っていません。
と私は、データベースのモデルや団体について考え、かなりのJsに新しくデータベースを作成するよ、と私はそのような事を書いたり、やることができれば、私は骨董品だ:適切だろう何

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var Sshkey = sequelize.define('Sshkey', { 
    sshkey_id: DataTypes.STRING, 
    sshkey: DataTypes.TEXT 
    }, { 
    classMethods: { 
     associate: function(models) { 
     // associations can be defined here 

     // My Problem starts here | 
     // Should i write   | 
     //      | 
     //      V 

     Sshkey.hasOne(models.User || models.Staff, {foreignKey: 'user_id'}) 

     // Or maybe: 
     // Sshkey.hasOne(models.User, {foreignKey: 'user_id'}) || 
     // Sshkey.hasOne(models.Staff, {foreignKey: 'user_id'}) 
     // Should i rather rename models.Staffs foreignKey user_id to staff_id? 

     // Or maybe: 
     // Sshkey.hasOne(models.User, {as: 'userkey', foreignKey: 'user_id'}) 
     // Sshkey.hasOne(models.Staff, {as: 'staffkey', foreignKey: 'user_id'}) 

     } 
    } 
    }); 
    return Sshkey; 
}; 

後で私はsshkeyをユーザまたはスタッフのどちらかに参照したいと思うという問題の解決策?
スタッフキーとユーザーキーで2つのモデルを作成しますか?あなたが1たい場合は事前に
おかげで、

BigZ

答えて

1

:外部キーuser_idSshkeyモデルに追加されたm個の関係を、次のようになります。私が持っている

User.hasMany(models.Sshkey, {foreignKey: 'user_id'}); 
Staff.hasMany(models.Sshkey, {foreignKey: 'user_id'}); 
Sshkey.belongsTo(models.User, {foreignKey: 'user_id'}); 
Sshkey.belongsTo(models.Staff, {foreignKey: 'user_id'}); 

一つの問題あなたの例では、user_idsshkey_idは両方ともそれらの周りに制約のない文字列であるため、非常に悪いですforeignKeyのとデータベースを設計するためのひどい。

User.findAll({ 
    where: {}, 
    include: [ { model: Sshkey } ] 
}); 
+0

私はコマンドラインからsequelizeを使用してモデルを作成し、主キー 'のようにプロパティを追加することができますどのような方法があります:true'を、' ALLOWNULL:false'をと 'onDelete:「cascade''へのユーザーとそのSSHKEYを取得するにはフィールドuser_id? 作成したモデルを必要に応じて編集することはできますか? 私はちょうど './sequelizeモデルを使用しました:モデルを作成するには、作成 - 名前ユーザー - 属性user_id:文字列、フルネーム:文字列、文字列、ユーザー名:文字列、コメント:テキスト ' 。 – BigZ

+0

私は方法があると仮定しますが、私は前にcliを実際に使用していません。 – jjbskir

関連する問題