2017-03-12 20 views
0

私は4つのテーブル/主キーとしてのIDを共有するモデルを持っていますが、例えば、私はちょうど私が共有IDを使用しています2、sequelize

User: { 
    id: { 
     type: Sequelize.INTEGER, 
     primaryKey: true, 
     allowNull: false 
    } 
Person: { 
    id: { 
     type: Sequelize.INTEGER, 
     primaryKey: true, 
     allowNull: false 
    }, 
    name: { 
     type: Sequelize.STRING 
    } 

が表示されます上の共有IDがテーブルの上に問い合わせる人そうにする方法プライマリキーはユーザのプライマリキーですが、自動作成はありません。では、これらの2つのテーブルを結合する方法はありますか?私は次のようなことを試みました:

getAll(){ 
    return User.getAll({ 
     include: [{ 
      model:Person, 
     }] 
    }) 
} 

しかし、関係がないので動作しません。私は何をすべきか? ありがとう

答えて

0

あなたは関係なしには使用できません。

var queryString = 'select * from User u join Person p on u.id = p.id where u.id = :sharedId'; 

models.sequelize 
    .query(queryString, { 
     replacements: { shareId: id}, 
     type: models.sequelize.QueryTypes.SELECT 
    }) 
    .then(function(result) { 
     res.json(attendance); 
    }); 

しかし、その後、あなたはテーブルがcorrecltyを埋めていることを確認する検証を実装する必要があります:あなたは次のような情報を取得するために、生のクエリを使用することができます。

しかし、私はテーブル間の関係をよりメンテナンスしやすいように実装することをお勧めします。このようなもの:

var User = sequelize.define("User", { 
    id: { type: DataTypes.INTEGER, primaryKey: true}, 
    name: { type: DataTypes.STRING, name: 'name' }, 
    ... 
}, { 
    classMethods: { 
    associate: function(models) { 
     User.hasOne(models.Person); 
    } 
    } 
}); 

var Person = sequelize.define("Person", { 
    id: { type: DataTypes.INTEGER, primaryKey: true}, 
    name: { type: DataTypes.STRING, name: 'name' }, 
    ... 
}, { 
    classMethods: { 
    associate: function(models) { 
     Person.belogsTo(models.User); 
    } 
    } 
});