javascript - 为什么 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' });
解决方案
它不会复数为“medium”,而是单数化为“medium”。
这是因为“media”是“medium”的复数,默认情况下,表名使用复数,引用使用单数,就像你有user_id
(单数)引用users
(复数)一样,所以这里medium_id
(not media_id
) 应该引用media
.
的确,如今在英语中,另一个(通常)不可数名词“媒体”出现了(可能是人们忘记了它确实起源于复数形式的拉丁词 medium),但这是 Sequelize 不知道的一个特例,真的,而且它也无法辨别您指的是这两个名词中的哪一个。
出于这个原因,Sequelize 有办法覆盖单数/复数形式。
1:我不是词源学家,所以请谨慎对待。
推荐阅读
- javascript - Mongoose Virtuals:异步设置器
- django - 将子对象中的特定字段连接到父对象中?
- umbraco - Umbraco 限制父节点下的子节点数
- npm - 如何将 Gatsby 版本从 3.14.2 降级到 ^2.0.0
- java - 如何在不下载 zip 文件的情况下获取 zip 文件的大小?
- manim - 如何在manim中控制显示速度?
- c++ - 我需要定义一个强制转换构造函数 - 一个表示文档名称的参数
- python - pyautogui screenshot 命令不起作用
- django - 从生产中输入 url 域/媒体时从媒体文件夹公开的媒体
- javascript - babel-plugin-rewire 无法正常使用 React Native 项目