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

MySql - Field 'park_id' doesn't have a default value

我是Mysql的新手,一直卡在这个上面

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

(node:24480) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: insert into articles_parks (article_id, park_id) values (0, DEFAULT) - ER_NO_DEFAULT_FOR_FIELD: Field 'park_id' doesn't have a default value

这是我的 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]),
      ]);
    })

您的两个主键(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)
);