我正在寫一個應用程序與節點,快遞,續集和我有一個小問題。我試圖在關係的「一部分」上加載一個模型。Sequelize.js:一對多關係渴望加載自定義字段
我得到這個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'通過存儲'albaran.AlbaranNo'的字段'cliente.ClienteID'連接到'Cliente'。換句話說,sequelize期待你有一個在Cliente上包含一個外國'AlbaranNo'的字段,因爲它使得關聯成爲可能。你可以試着將它們反向關聯(例如'db.Cliente.hasOne(db.Albaran,{as:「albaran」,foreignKey:「ClienteID」})'可能適用。我不知道這是否會起作用 –
不好意思,我想到了一對一的關係,所以我寫錯了問題標題。它是一對多,一個**客戶**到很多** albaran * *所以,我不能把AlbaranNo放在Cliente上,我不能寫你建議的協會。PD:真的對不起,我是新來的,我怎麼才能糾正這個問題? – junjs