首页 > 解决方案 > 为什么 Sequelize 将“媒体”复数化为媒体

问题描述

我在 sequelize 试图给我最好的猜测它认为我的表名是什么时遇到了一个非常大的问题。

我有 3 张桌子。属性、媒体和连接表 PropertyMedia

出于某种原因,当我使用 sequelize 进行连接查询时,它给了我错误

error: column Properties->PropertyMedia.medium_id does not exist

我已经进行了全球搜索,以确保我在任何地方都没有媒体这个词,而且我没有

let Media = sequelize.define('Media', {
    url: DataTypes.STRING,
    isVideo: DataTypes.BOOLEAN
}, { freezeTableName: true, tableName: 'media' });

let PropertyMedia = sequelize.define('PropertyMedia', {
    propertyId: DataTypes.INTEGER,
    mediaId: DataTypes.INTEGER
}, { freezeTableName: true, tableName: 'property_media' });

标签: javascriptnode.jssequelize.js

解决方案


它不会复数为“medium”,而是单数化为“medium”。

这是因为“media”是“medium”的复数,默认情况下,表名使用复数,引用使用单数,就像你有user_id(单数)引用users(复数)一样,所以这里medium_id(not media_id) 应该引用media.

的确,如今在英语中,另一个(通常)不可数名词“媒体”出现了(可能是人们忘记了它确实起源于复数形式的拉丁词 medium),但这是 Sequelize 不知道的一个特例,真的,而且它也无法辨别您指的是这两个名词中的哪一个。

出于这个原因,Sequelize 有办法覆盖单数/复数形式


1:我不是词源学家,所以请谨慎对待。


推荐阅读