【问题标题】:How to define array of objects in Sequelize.js?如何在 Sequelize.js 中定义对象数组?
【发布时间】:2014-10-02 05:33:43
【问题描述】:

如何在 Sequelize.js 模型中定义对象字段数组?
我需要这样的东西

{
    "profiles" : [
        {
            "profile_id": 10,
            "profile_pictures" : ["pic1.jpg","pic2.jpg","pic3.jpg"],
            "profile_used_id" : 12
        },
        ... // more profiles
    ]
}

我检查了docs,但找不到相关的数据类型,我在这里遗漏了什么吗?

【问题讨论】:

    标签: javascript sequelize.js


    【解决方案1】:

    我已经成功地通过定义我的模型来模仿数组:

    var MyModel = sequelize.define('MyModel', {
        myArrayField: { 
            type: DataTypes.STRING, 
            get: function() {
                return JSON.parse(this.getDataValue('myArrayField'));
            }, 
            set: function(val) {
                return this.setDataValue('myArrayField', JSON.stringify(val));
            }
        }
    }
    

    【讨论】:

    • with defaultValue: '[]'
    • 类型:DataTypes.STRING
    【解决方案2】:

    我目前能想到 2 种解决方案(如果您使用的是 PostgreSQL,第 3 种解决方案)。

    1. 我们有一个关系数据库在后面工作,所以它的原理也适用于 Sequelize,它是关系数据库的 ORM。最简单的方法是创建另一个表或实体并将它们关联为 1:n 关系。 为此,在 Sequelize 中添加一个新模型并定义其关联,如下所述:http://sequelizejs.com/articles/getting-started#associations 您可能有 2 张桌子。一张包含 N 张图片的个人资料表。

    2. 如果它只是一个文件名或 url,你可以将 Javascript 数组序列化为 JSON 字符串,例如:

      //保存前

      var mypics = ["pic1.jpg","pic2.jpg"]; profile.pictures = JSON.stringify(mypics); profile.save()

      //加载后使用前

      var profile = Profile.get(1) 图片 = JSON.parse(profile.pictures);

    3. 如果您使用 PostgreSQL,您可以为此字段使用数组数据类型,请参阅: http://www.postgresql.org/docs/8.4/static/arrays.html

      或 JSON 数据类型:

      http://www.postgresql.org/docs/9.3/interactive/datatype-json.html

    如果您的图片对象在功能中或将要更复杂,请选择 1。或者,如果您想按文件名查询。 如果以后不做任何数据过滤或复杂数据,请选择 2。

    选择 3?我认为最好坚持 Sequelize 抽象而不使用自定义数据类型,即使在这种情况下也是可能的。也许你最好坚持 1 或 2。

    【讨论】:

    • 假设我使用 Postgres,我会定义像 Sequelize.ARRAY(Sequelize.JSON) 这样的对象数组,对吗?
    • Sequelize.ARRAY(Sequelize.JSON) 不起作用
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2020-12-29
    相关资源
    最近更新 更多