MySql - 字段'park_id'没有默认值

时间:2017-03-01 21:16:01

标签: mysql bookshelf.js

我是Mysql的新手,我已经坚持了一段时间。

我正在使用bookshelfjs创建多对多关系,每当我尝试将文章附加到公园时,我都会收到以下错误。

  

(node:24480)UnhandledPromiseRejectionWarning:未处理的承诺   拒绝(拒绝ID:1):错误:插入articles_parks   (article_idpark_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]),
      ]);
    })

1 个答案:

答案 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)
);