防止续集添加结尾小写's'

Posted

技术标签:

【中文标题】防止续集添加结尾小写\'s\'【英文标题】:Prevent sequelize adding ending lowercase 's'防止续集添加结尾小写's' 【发布时间】:2017-03-22 08:31:45 【问题描述】:

我将此表定义为

var T_CPCORE_INGREDIENT_UNITS = sequelize.define('T_CPCORE_INGREDIENT_UNITS'

我已经用这个配置了,冻结表名

    freezeTableName: true

我将此表用作另一个表中的包含查询

request.models.T_CPCORE_INGREDIENTS.findById(request.params.id, 
  include: [
    
      model: request.models.T_CPCORE_INGREDIENT_UNITS
    

但如果我打印返回的对象,我可以在控制台中看到 T_CPCORE_INGREDIENT_UNITS 现在看起来像这样

T_CPCORE_INGREDIENT_UNITs

末尾有一个小写的“s”。这很烦人,因为有时在我使用此名称的代码中必须记住使用小写的's'。 我怎样才能防止这种情况发生?

【问题讨论】:

【参考方案1】:

定义关联时需要使用alias。如果没有,Sequelize 会自动在关联模型名称的末尾添加不需要的 s(在 1:m 或 n:m 关系的情况下)。让我们假设hasMany 关系,只是为了展示它的样子

T_CPCORE_INGREDIENTS.hasMany(T_CPCORE_INGREDIENT_UNITS,  as: 'T_CPCORE_INGREDIENT_UNITS' );

alias (as) 定义了plural name of associated model。定义 alias 时的重要一点是在查询时急切加载模型时使用它

request.models.T_CPCORE_INGREDIENTS.findById(
    request.params.id, 
    include: [
        
            model: request.models.T_CPCORE_INGREDIENT_UNITS,
            as: 'T_CPCORE_INGREDIENT_UNITS'
        
    
)

所以现在,模型将属性T_CPCORE_INGREDIENT_UNITS 作为一个数组,最后没有添加s

注意:别名也可以定义为具有singularplural属性的对象,这将定义单个关联或多个关联的命名策略。

【讨论】:

以上是关于防止续集添加结尾小写's'的主要内容,如果未能解决你的问题,请参考以下文章

防止电子邮件结尾被折叠

将一个路径进行标准化的解析, 防止路径中连续出现多个‘/’,以及防止路径中出现'\', 防止路径结尾出现 '/'

防止 Sequelize 将列名用引号括起来

Laravel 5:当 url 以“/”结尾时防止重定向 [重复]

如何防止 groovy 创建小写(元)属性名称?

防止 BeautifulSoup 将我的 XML 标记转换为小写