簡體   English   中英

通過sequelize返回父屬性

[英]Returning parent attributes via sequelize

我正在使用sequelize作為具有令人興奮的數據庫的ORM來開發 NodeJs應用程序,因此我不得不使用sequelize模型生成器來為我的應用程序生成模型。
這是生成輸出的示例:

Category.js

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('category', {
        id: {
            type: DataTypes.STRING(128),
            allowNull: false,
            primaryKey: true,
            field: 'id'
        },
        name: {
            type: DataTypes.TEXT,
            allowNull: true,
            field: 'name'
        }
    }, {
        tableName: 'category'
    });
};

Product.js

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('product', {
        id: {
            type: DataTypes.STRING(128),
            allowNull: false,
            primaryKey: true,
            field: 'id'
        },
        category: {
            type: DataTypes.STRING(128),
            allowNull: false,
            references: {
                model: 'category',
                key: 'id'
            },
            field: 'category'
        },
        name: {
            type: DataTypes.TEXT,
            allowNull: true,
            field: 'name'
        }
    }, {
        tableName: 'product'
    });
};

然后在我的控制器內,我有以下查詢:

models.product.findOne({
    where: {
        id: req.body.id
    }
}).then(function (obj) {
    //return the product data
    console.log(product.category) //works
    console.log(product.category.name) //return undefined
});

問題是如何通過同一查詢findOne訪問父表屬性? 是否有與product.category.id類似或等同的東西?

如果您同時關聯了兩個模型,請嘗試以下操作

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('product', {
        id: {
            type: DataTypes.STRING(128),
            allowNull: false,
            primaryKey: true,
            field: 'id'
        },
        category_id: {
            type: DataTypes.STRING(128),
            allowNull: false,
            references: {
                model: 'category',
                key: 'id'
            },
            field: 'category'
        },
        name: {
            type: DataTypes.TEXT,
            allowNull: true,
            field: 'name'
        }
    }, {
        tableName: 'product'
    });
}

models.product.findOne({
    where: {
        id: req.body.id
    },
    include: [{
        model: category,
        required: false
      }]
}).then(function (obj) {
    //return the product data
    console.log(product.category) //works
    console.log(product.category.name) //return undefined
});

像這樣的同事

product.hasMany(db.category, {  
  foreignKey: 'category_id',
  onDelete: 'cascade'
});

category.belongsTo(db.product, {
  foreignKey: 'category_id',
  targetKey: 'id',
  constraints: true
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM