【问题标题】: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'。 我怎样才能防止这种情况发生?

【问题讨论】:

    标签: javascript postgresql orm sequelize.js


    【解决方案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属性的对象,这将定义单个关联或多个关联的命名策略。

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 2021-04-18
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2014-05-11
      • 2019-04-03
      • 1970-01-01
      • 2019-05-10
      相关资源
      最近更新 更多