【发布时间】:2013-10-27 01:50:13
【问题描述】:
我正在用 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'});
谢谢大家
【问题讨论】:
-
当您描述您的
Albaran模型和您的Cliente模型之间的关系时,您是说Albaran通过存储cliente.ClienteID的字段cliente.ClienteID链接到Cliente.换句话说,sequelize 期望您在Cliente上拥有一个包含外部AlbaranNo的字段,因为它建立关联的方式。您可以尝试将它们反向关联(即db.Cliente.hasOne(db.Albaran, {as: "albaran", foreignKey: "ClienteID"}),这可能适用。至于像您已经描述的那样自定义这种关系,我不知道这是否可行。 -
对不起,我想到了一对一的关系,所以我写错了问题标题。它是一对多,一个客户 对许多albaran。所以,我不能把 AlbaranNo 放在 Cliente 上,也不能写出你建议的关联。 P.D:真的很抱歉,我是新来的。如何更正标题?
标签: node.js express sequelize.js