Присоединиться или заполнить запрос в Sequelize - PullRequest
0 голосов
/ 26 декабря 2018

Изначально я использовал mongoDb для доступа или управления базой данных.Но теперь я хочу перейти на mySQL, но затем я использовал Sequelize ORM для получения или установки данных.Но у меня возникла проблема при объединении или заполнении двух таблиц для отображения данных на экране

Я уже включил атрибут для получения целых данных, но мне не удалось использовать схему

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,
        }
    }
}

Мне нужно имя склада в моей таблице местоположений, где я связал таблицу местоположений с кодом_склада.

1 Ответ

0 голосов
/ 27 декабря 2018

Я получил решение проблемы.Все, что мне нужно сделать, это

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

Пока я давал:

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

в операторе включения отсутствовали квадратные скобки

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