node.js - 在 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 链接起来。
解决方案
我得到了问题的解决方案。我需要做的就是
{ 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;
}
} );
推荐阅读
- amazon-web-services - AWS CodeBuild CODEBUILD_SOURCE_VERSION 不正确
- php - 阻止文件下载 301 Moved Permanently 用于 HSTS 的 url
- php - 在 Laravel 5.7 中使用 Phpredis
- puppeteer - 每页内容的下拉菜单未更改
- vba - 新行添加或删除时VBA参考单元格不会改变
- python - 路径的Python变量连接?
- java - SLF4J-Logback : 基于日志级别的多种模式
- laravel - 如何在laravel中将收藏作为excel文件发送
- ios - 在 Swift 4 中将 Facebook 连接到应用程序委托
- node.js - 如何删除 MongoDB 用户模式中的任务引用