首页 > 解决方案 > 在 Sequelize 中加入或填充查询

问题描述

最初我使用 mongoDb 来访问或操作数据库。但现在我想转向 mySQL 但后来我使用 Sequelize ORM 来获取或设置数据。但是我在将 2 个表连接或填充在一起以在屏幕上显示数据时遇到问题

我已经包含属性来获取整个数据,但我失败了

Warehouse.findAll( { raw: true } ).then( warehouses => {
                Location.findAll( { raw: true }, { include: { model: Warehouse } } ).then( locations => {
                    const locationObject = locations.map( loaction => {
                        return Object.assign( {}, {
                            location_code: loaction.location_code,
                            location_name: loaction.location_name,
                            location_created_on: loaction.location_created_on,
                            isActive: loaction.isActive,
                            location_warehouse: warehouses.map( warehouse => {
                                return Object.assign( {}, {
                                    warehouse_code: warehouse.warehouse_code,
                                    warehouse_name: warehouse.warehouse_name,
                                } )
                            } )
                        } )
                    } )
                    console.log( "locations---------------", locations )
                    if ( locations == null )
                        return res.status( 422 ).send( { header: "Error", content: "err-msg.NoData" } );
                    else {
                        Location.count().then( counts => {
                            if ( err ) {
                                res.status( 422 ).send( { header: "Error", content: "err-msg.NoData" } );
                            } else {
                                res.send( {
                                    success: true,
                                    msg: resp = {
                                        locations,
                                        counts
                                    }
                                } );
                            }
                            return;
                        } );
                        return;
                    }
                    res.json( locationObject );
                } );
            } )

我使用的架构

module.exports = function () {
    const Sequelize = require( 'sequelize' );
    const { db } = require( '../../Config/config' );
    const sequelize = new Sequelize( db.url , '*********',, '*********', {
        host: '*********',,
        port: '3306',
        dialect: 'mysql',
        operatorsAliases: false,
        pool: {
            max: 5,
            min: 0,
            acquire: 30000,
            idle: 10000
        },
        define: {
            timestamps: false
        }
    } );

    const Warehouse = sequelize.define( 'warehouses', {
        warehouse_code: {
            type: Sequelize.STRING,
            primaryKey: true
        },
        warehouse_name: Sequelize.STRING,
    } );

    const Location = sequelize.define( 'locations', {
        location_code: {
            type: Sequelize.STRING,
            primaryKey: true
        },
        location_name: Sequelize.STRING,
        location_warehouse:  {
            type: Sequelize.STRING,
            references: 'warehouses', //table name
            referencesKey: 'warehouse_code'   // column name in the table
        }
    } );

    Warehouse.hasMany(Location , {foreignKey: 'location_warehouse', sourceKey: 'warehouse_code'});
    Location.belongsTo(Warehouse , {foreignKey: 'location_warehouse', targetKey: 'warehouse_code'});

    return {
        models: {
            Location,
            Warehouse,
        }
    }
}

我想在我的位置表中使用仓库名称,我已将位置表与warehouse_code 链接起来。

标签: node.jsdatabasesequelize-cli

解决方案


我得到了问题的解决方案。我需要做的就是

{ include: [ { model: Warehouse, as: 'warehouse' } ] }

在我给的时候:

{ raw: true }, { include: { model: Warehouse }}

include 语句中缺少方括号

Location.findAll( { include: [ { model: Warehouse, as: 'warehouse' } ] } ).then( locations => {
                if ( locations == null )
                    return res.status( 422 ).send( { header: "Error", content: "err-msg.NoData" } );
                else {
                    Location.count().then( counts => {
                        res.send( {
                            success: true,
                            msg: resp = {
                                locations,
                                counts
                            }
                        } );
                        return;
                    } );
                    return;
                }
            } );

推荐阅读