如何在Sequelize.js模型中定义对象数组?
我需要这样的东西
{
"profiles" : [
{
"profile_id": 10,
"profile_pictures" : ["pic1.jpg","pic2.jpg","pic3.jpg"],
"profile_used_id" : 12
},
... // more profiles
]
}
我检查了docs,但无法找到相关的数据类型,我在这里遗漏了什么吗?
答案 0 :(得分:12)
我通过定义我的模型成功地模仿了数组:
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));
}
}
}
答案 1 :(得分:9)
我现在可以想到2个解决方案(如果使用PostgreSQL,则可以考虑第3个解决方案)。
我们有一个关系数据库,它的原则也适用于Sequelize,它是关系数据库的ORM。最简单的方法是创建另一个表或实体并将它们关联为1:n关系。 为此,在Sequelize中添加一个新模型并定义其关联,如下所述:http://sequelizejs.com/articles/getting-started#associations 你可能有2个表。一张有N张照片的个人资料表。
如果只是一个文件名或网址,您可以将Javascript数组序列化为JSON字符串,如:
//保存前
var mypics = [“pic1.jpg”,“pic2.jpg”]; profile.pictures = JSON.stringify(mypics); profile.save()
//使用前加载后
var profile = Profile.get(1) pictures = JSON.parse(profile.pictures);
如果您使用PostgreSQL,您可以在此字段中使用Array数据类型,请参阅: http://www.postgresql.org/docs/8.4/static/arrays.html
或JSON数据类型:
http://www.postgresql.org/docs/9.3/interactive/datatype-json.html
如果您的Picture对象在该功能中是或将更复杂,请转到1。或者,如果您想按文件名查询。 如果您将来不做任何数据过滤或复杂数据,请转到2。
去3?我认为最好坚持使用Sequelize抽象而不是使用自定义数据类型,即使在这种情况下也是如此。也许你最好坚持1或2。
答案 2 :(得分:-5)
尝试定义像这样的数组
var profiles = {
profile_id: 10,
profile_pictures: {
"pic1.jpg",
"pic2.jpg",
"pic3.jpg"
},
profile_used_id: 12
}