我是Mysql的新手,我已经坚持了一段时间。
我正在使用bookshelfjs创建多对多关系,每当我尝试将文章附加到公园时,我都会收到以下错误。
(node:24480)UnhandledPromiseRejectionWarning:未处理的承诺 拒绝(拒绝ID:1):错误:插入
articles_parks
(article_id
,park_id
)值(0,DEFAULT) - ER_NO_DEFAULT_FOR_FIELD:字段'park_id'没有默认值
这是我的MySQL代码:
Create table parks(
park_id integer,
primary key (park_id)
);
Create table articles(
article_id integer,
primary key (article_id)
);
CREATE TABLE articles_parks(
article_id integer,
park_id integer,
Primary Key (article_id,park_id),
Foreign Key (article_id) REFERENCES articles(article_id),
Foreign Key (park_id) REFERENCES parks(park_id)
);
这是我的书架代码:
var bookshelf = require('bookshelf')(knex);
var Article = bookshelf.Model.extend({
tableName: 'articles',
park: function() {
return this.belongsToMany(Park);
}
});
var Park = bookshelf.Model.extend({
tableName: 'parks',
articles: function() {
return this.belongsToMany(Article);
}
});
const number = 197;
var article1 = new Article({article_id: number});
Promise.all([article1.save()])
.then(function() {
return Promise.all([
new Park({park_id: 200}).articles().attach([article1]),
]);
})
答案 0 :(得分:1)
您的两个主键(park_id和article_id)未设置为自动递增。在MySQL中,您必须明确声明您希望主键自动递增,或者它将假定您将手动分配它们的值。这就是它返回错误的原因,即它们缺少默认值。
尝试编辑SQL代码:
Create table parks(
park_id integer AUTO_INCREMENT,
primary key (park_id)
);
Create table articles(
article_id integer AUTO_INCREMENT,
primary key (article_id)
);
CREATE TABLE articles_parks(
article_id integer,
park_id integer,
Primary Key (article_id,park_id),
Foreign Key (article_id) REFERENCES articles(article_id),
Foreign Key (park_id) REFERENCES parks(park_id)
);