Sequelize hasMany 失败
Posted
技术标签:
【中文标题】Sequelize hasMany 失败【英文标题】:Sequelize hasMany fails 【发布时间】:2018-07-21 08:18:06 【问题描述】:我正在尝试与 Sequelize 建立一对多关联:
这是我的项目:
'use strict';
import models from '../sequelize/index';
var ProjectImages = require('./projectImages');
module.exports = (sequelize, DataTypes) =>
const Projects = sequelize.define(
'Projects',
id:
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
,
title:
type: DataTypes.STRING,
,
,
);
Projects.associate = function(models)
// associations can be defined here
Projects.belongsToMany(models.Tags, through: models.TagsProjects );
Projects.hasMany(models.ProjectImages);
;
return Projects;
;
这里是项目的图片:
'use strict';
import models from '../sequelize/index';
module.exports = (sequelize, DataTypes) =>
const ProjectImages = sequelize.define(
'ProjectImages',
id:
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
,
img:
type: DataTypes.STRING,
,
createdAt:
allowNull: false,
type: DataTypes.DATE,
defaultValue: DataTypes.literal('CURRENT_TIMESTAMP'),
,
updatedAt:
allowNull: false,
type: DataTypes.DATE,
defaultValue: DataTypes.literal('CURRENT_TIMESTAMP'),
,
,
);
return ProjectImages;
;
我正在使用类似于this snippet 的内容同步数据库。如果我不尝试在 ProjectImages 中创建任何行,我不会收到任何错误;但是如果我尝试用这个创建行(存在 id: 1 的项目):
"ProjectImages": [
"id": 1,
"img": "https://fakeimg.pl/500x500/",
"ProjectsId": 1
],
我收到此错误:
Executing (default): INSERT INTO `ProjectImages`
(`id`,`img`,`createdAt`,`updatedAt`,`ProjectId`)
VALUES
(1,'https://fakeimg.pl/500x500/',CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,1);
[1] Unhandled rejection SequelizeForeignKeyConstraintError:
Cannot add or update a child row: a foreign key constraint fails
(`9uhfggfhf2`.`projectimages`,
CONSTRAINT `projectimages_ibfk_1`
FOREIGN KEY (`ProjectId`)
REFERENCES `Projects` (`id`)
ON DELETE SET NULL
ON UPDATE CASCADE)
另外,如果我在同步时没有向 ProjectsImages 添加一行,我也不会收到任何错误,并且如果我尝试在 DB 中手动插入该行:
INSERT INTO `ProjectImages` (`id`,`img`,`createdAt`,`updatedAt`,`ProjectsIdA`)
VALUES (1,'https://fakeimg.pl/500x500/',CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,1);
它没有任何问题。
有人知道那里发生了什么吗?
【问题讨论】:
【参考方案1】:正如我所说,我使用类似于 this 的东西来与数据库同步。
在 sn-p 结束时,我必须播种数据:
seed([
articles,
projectImages,
projects,
tags,
tagsProjects,
users,
usersLogins
]);
您会注意到,我在创建projects
之前插入了projectImages
。按正确的顺序放置东西可以解决问题。
seed([
articles,
projects,
projectImages,
tags,
tagsProjects,
users,
usersLogins
]);
:)
【讨论】:
以上是关于Sequelize hasMany 失败的主要内容,如果未能解决你的问题,请参考以下文章
sequelize/sequelize-typescript - 带有 HasMany 的 findAll 返回一个对象而不是数组
Sequelize hasMany工作正常,但反比关系不正常
model.hasMany 调用的东西不是 Sequelize.Model 的子类