Sequelize配置多对多关联后无法为数据表行设置外键问题求助
问题解决步骤
你当前的多对多关联配置存在3个核心错误,逐一修正即可正常使用:
1. 修正关联配置的外键映射与别名
你之前的关联配置中,中间表字段映射错误、别名和查询时使用的名称不匹配,直接修改Associations.js的关联代码:
import Autoridad from '../models/CatAutoridadResponsable.js'; import juicioAmparo from '../models/juicioAmparo.js'; import Autoridad_Juicio from './Autoridad_Juicio.js'; export const crear_asociaciones = (activado) => { if(activado === true){ console.log('----------> Creando asociaciones <----------'); Autoridad.belongsToMany(juicioAmparo, { as: 'juiciosAmparoAsociados', // 从Autoridad侧查询时用的别名,可自定义 through : Autoridad_Juicio, foreignKey: 'id_autoridad', // 当前模型Autoridad在中间表的外键字段名,配置正确 otherKey: 'id_juicio' // 修正:juicioAmparo在中间表的字段是id_juicio,不是id_juicio_amparo }); juicioAmparo.belongsToMany(Autoridad, { as: 'autoridad_responsable', // 修正:和你查询时include的名称完全一致 through : Autoridad_Juicio, foreignKey: 'id_juicio', // 修正:当前模型juicioAmparo在中间表的外键是id_juicio,不是id_juicio_amparo otherKey: 'id_autoridad' // 另一个模型Autoridad在中间表的外键,配置正确 }); console.log('----------> Asociaciones creadas <----------'); } else { console.log('>> Asociaciones omitidas'); } }
2. 修正中间表字段类型不匹配问题
你当前AutoridadJuicio.js中id_juicio字段类型为普通INTEGER,但关联的juicioAmparo主键id_juicio_amparo是INTEGER UNSIGNED,类型不一致会导致关联失败,修改字段定义:
// AutoridadJuicio.js中的id_juicio字段修改为 id_juicio:{ type: DataTypes.INTEGER.UNSIGNED, // 改成和关联主键一致的UNSIGNED属性 allowNull: false, references: { model: juicioAmparo, key: 'id_juicio_amparo' } }
3. 验证查询与关联操作
修正后你的原查询代码即可正常返回关联数据:
// 正常查询关联数据 const juicios = await juicioAmparo.findAll({ include: 'autoridad_responsable' }); // 关联操作的mixin方法也可以正常使用,方法名规则是set+别名首字母大写 const juicio = await juicioAmparo.findByPk(1); await juicio.setAutoridad_responsable([1,2,3]); // 传入要关联的Autoridad的id数组即可
内容的提问来源于stack exchange,提问作者Sthefany Rangel
相关产品推荐
相关产品推荐

