江湖人称向前兄 2023-05-07 17:39
浏览 9
已结题

sequelize v6 的多对对关系,报错Unknown column 'tagsBookmark->bookmarkTag.bookmarkId' in 'field list

前端不是太懂数据库,业余时间在用 nextjs 和 sequelize 写个小项目,其他 MySQL 问题也跌跌撞撞过来了,但是后面遇到了连表查询、多表关联的问题(belongsToMany),不知问题出在哪里,请懂数据库的小伙伴帮忙解答,非常感谢!

问题描述: 书签和tag之间属于多对多关系,目前想实现查询某个tag下面对应哪些书签。
报错信息:

img

文字版

"Unknown column 'tagsBookmark->bookmarkTag.bookmarkId' in 'field list'",
    sql: 'SELECT `bookmark`.`id`, `bookmark`.`title`, `bookmark`.`url`, `bookmark`.`image`, `bookmark`.`description`, `bookmark`.`tagsArr`, `bookmark`.`is_favorite`, `tagsBookmark`.`id` AS `tagsBookmark.id`, `tagsBookmark`.`name` AS `tagsBookmark.name`, `tagsBookmark->bookmarkTag`.`id` AS `tagsBookmark.bookmarkTag.id`, `tagsBookmark->bookmarkTag`.`bkId` AS `tagsBookmark.bookmarkTag.bkId`, `tagsBookmark->bookmarkTag`.`tagId` AS `tagsBookmark.bookmarkTag.tagId`, `tagsBookmark->bookmarkTag`.`bookmarkId` AS `tagsBookmark.bookmarkTag.bookmarkId` FROM `bookmark` AS `bookmark` LEFT OUTER JOIN ( `bookmarkTag` AS `tagsBookmark->bookmarkTag` INNER JOIN `tags` AS `tagsBookmark` ON `tagsBookmark`.`id` = `tagsBookmark->bookmarkTag`.`tagId`) ON `bookmark`.`id` = `tagsBookmark->bookmarkTag`.`bookmarkId`;'

model/bookmark.js


module.exports = (sequelize, DataTypes) => {
  let bookmark = sequelize.define('bookmark', {
    id: {
      type: DataTypes.STRING,
      primaryKey: true,
      autoIncrement: true,
    },
    title: {
      type: DataTypes.STRING, // varchar(255)
      allowNull: false,
      unique: false,
    },
    url: {
      type: DataTypes.STRING, // varchar(255)
      allowNull: false,
      unique: false,
    },
    image: {
      type: DataTypes.STRING, // varchar(255)
      allowNull: true,
      unique: false,
    },
    description: {
      type: DataTypes.STRING, // varchar(255)
      allowNull: true,
      unique: false,
    },
    tagsArr: {
      type: DataTypes.STRING, // varchar(255)
      allowNull: true,
      unique: false,
    },
    is_favorite: {
      type: DataTypes.BOOLEAN, // varchar(255)
      allowNull: true,
      unique: false,
    },
  }, {
    freezeTableName: true, 
    timestamps: false, 
    tableName: 'bookmark',
  });
  bookmark.associate = (models) => {
    models.bookmark.belongsToMany(models.tags,
      {
        as: 'tagsBookmark',
        through: 'bookmarkTag',
      },
    );
  };
  return bookmark;
};

model/tags.js

module.exports = (sequelize, DataTypes) => {
  let tags = sequelize.define('tags', {
    id: {
      type: DataTypes.STRING,
      primaryKey: true,
      autoIncrement: true,
    },
    name: {
      type: DataTypes.STRING,
      allowNull: false,
      unique: false,
    },
  }, {
    freezeTableName: true,
    tableName: 'tags',
    timestamps: false,
  });

  tags.associate = (models) => {
    models.tags.belongsToMany(models.bookmark,
      {
        as: 'tagsBookmark',
        through: 'bookmarkTag',
      },
    );
  };
  return tags;
};

model/bookmarkTag.js

module.exports = (sequelize, DataTypes) => {
  let bookmarkTag = sequelize.define('bookmarkTag', {
    id: {
      type: DataTypes.STRING,
      primaryKey: true,
      autoIncrement: true,
    },
    bkId: {
      type: DataTypes.STRING,
      allowNull: false,
      references: {
        model: sequelize.models.bookmark,
        key: 'id',
      },
    },
    tagId: {
      type: DataTypes.STRING,
      allowNull: false,
      references: {
        model: sequelize.models.tags,
        key: 'id',
      },
    },
  }, {
    freezeTableName: true, 
    tableName: 'bookmarkTag',
    timestamps: false,
  });
  return bookmarkTag;
};

api/tags.js

 const tmp = await models.bookmark.findAll({
          include: {
            model: models.tags,
            as: 'tagsBookmark',
          },
          attributes: ['id'],
        });

问题点:
1、不知道自己的表关联写法有么有问题,不写 as 的话,会报错,写了 as ,但是实际上打算用的关联表是 “bookmarkTag.js”,不明白报错信息为什么会是最上面截图那个。
2、不是非常确定表关联关系是否写得有问题?烦请后端指出。比如 belongsToMany、associate语法的使用。我用的是 sequelize v6 版本。
再次感谢,困扰了好久了,网上搜索过,但是由于版本变化写写法不一,不知道具体该怎么解决

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月15日
    • 修改了问题 5月7日
    • 创建了问题 5月7日

    悬赏问题

    • ¥15 SPSS分类模型实训题步骤
    • ¥15 求解决扩散模型代码问题
    • ¥15 工创大赛太阳能电动车项目零基础要学什么
    • ¥20 limma多组间分析最终p值只有一个
    • ¥15 nopCommerce开发问题
    • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
    • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
    • ¥15 pycharm输出和导师的一样,但是标红
    • ¥15 想问问富文本拿到的html怎么转成docx的
    • ¥15 我看了您的文章,遇到了个问题。