3

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'});

みんなありがとう

4

1 に答える 1

2

これはそれかもしれません:

db.Cliente.hasMany(db.Albaran, {as: "albaran", foreignKey: 'ClienteID'});

詳細はこちら: http://sequelizejs.com/documentation#associations-one-to-many

反対側は次のとおりです。

db.Albaran.hasOne(db.Cliente, {as: "cliente", foreignKey: 'AlbaranNo"});

于 2013-10-26T10:24:45.860 に答える