node、express、sequelize を使用してアプリを作成していますが、少し問題があります。関係の「一部」にモデルを積極的にロードしようとしています。
私はこのSQLを取得します:
Executing: SELECT `albaran`.*, `cliente`.`ClienteID` AS `cliente.ClienteID`,
`cliente`.`NombreES` AS `cliente.NombreES` FROM `albaran` LEFT OUTER JOIN `cliente` AS
`cliente` ON `albaran`.`AlbaranNo` = `cliente`.`ClienteID` WHERE
`albaran`.`AlbaranNo`='2013100001';
そして、私はそれが必要です:
Executing: SELECT `albaran`.*, `cliente`.`ClienteID` AS `cliente.ClienteID`,
`cliente`.`NombreES` AS `cliente.NombreES` FROM `albaran` LEFT OUTER JOIN `cliente` AS
`cliente` ON `albaran`.`ClienteID` = `cliente`.`ClienteID` WHERE
`albaran`.`AlbaranNo`='2013100001';
だから私はビューでそれにアクセスできました(今は空の文字列を取得しています):
#{albaran.cliente.NombreES}
これはコードです:
albaran.js
module.exports = function(sequelize, DataTypes) {
return sequelize.define("Albaran", {
AlbaranNo: { type: DataTypes.BIGINT, primaryKey: true},
ClienteID: {
type: DataTypes.STRING, //this must be string, I am not who defined the db
references: "Cliente",
referencesKey: "ClienteID"
}},{
timestamps: false,
freezeTableName: true,
tableName: 'albaran'
})
}
cliente.js
module.exports = function(sequelize, DataTypes) {
return sequelize.define("Cliente", {
ClienteID: {
type: DataTypes.STRING, primaryKey: true
},
NombreES: DataTypes.STRING
},{
timestamps: false,
freezeTableName: true,
tableName: 'cliente'
})
}
協会
db.Albaran.hasOne(db.Cliente, {as: "cliente", foreignKey: 'ClienteID'});
ルーター
exports.albaran = function(req, res) {
db.Albaran.findAll({ include: [{ model: db.Cliente, as: "cliente" }]})
.success(function (albaranes){
res.render("albaranes", {albaranes: albaranes});
});
};
どうもありがとうございました。私は自分自身を明確に説明したことを願っています。
版:
関連付けを変更するソリューションを見つけました:
db.Albaran.belongsTo(db.Cliente, {as: "cliente", foreignKey: 'ClienteID', primaryKey: 'ClienteID'});
db.Cliente.hasMany(db.Albaran, {as: "albaranes", foreignKey: 'ClienteID'});
みんなありがとう