如何使用sailsjs模型关联在postgres中添加额外的列?
这是我的两个模型的一个例子
// Users.js attribute
...
challenges: {
collection: 'challenge',
via: 'userChallenge'
}
// Challenge.js attribute
...
userChallenge: {
collection: 'users',
via: 'challenges'
}
...
通过这个我获得表关联(多对多)
id | challenge_userChallenge | users_challenges
我需要一个或多个额外的列,例如“有效”或类似的
提前致谢
答案 0 :(得分:2)
您应该使用through associations。
通过关联的多对多行为与多对多行为相同 除了连接表之外的关联是自动的 为你创造。在多对多通过关联中,您定义了一个 包含两个对应于您将使用的两个模型的字段的模型 联合起来。定义关联时,您将添加 通过键来表明应该使用模型而不是 自动连接表。
我们以Post
和Tag
模型为例。 Post
拥有并属于许多Tag
,而Tag
拥有并属于许多Post
。这两个模型将通过PostTag
模型加入。
我们的Post
模型:
/**
* Post.js
*
* @description :: A model definition. Represents a database table/collection/etc.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
tableName: 'posts',
attributes: {
name: {
type: 'string',
required: true
},
// Many to many: Post has and belongs to many Tag.
tags: {
collection: 'Tag',
via: 'postId',
through: 'PostTag'
}
};
我们的Tag
模型:
/**
* Tag.js
*
* @description :: A model definition. Represents a database table/collection/etc.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
tableName: 'tags',
attributes: {
name: {
type: 'string',
unique: true,
required: true
},
// Many to many: Tag has and belongs to many Post.
posts: {
collection: 'Post',
via: 'tagId',
through: 'PostTag'
}
}
};
我们的PostTag
模型(我们手动创建它,我们不希望Sails.js自动创建它):
/**
* PostTag.js
*
* @description :: A model definition. Represents a database table/collection/etc.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
tableName: 'posts_tags',
attributes: {
postId: {
model: 'Post'
},
tagId: {
model: 'Tag'
}
}
};
PostTag
模型实际上是连接表。在此模型中,您可以定义额外的字段。
希望这有帮助。
答案 1 :(得分:0)
虽然Vladyslav Turak的answer对于Sails v1.0 及以上正确,但请注意<{3}} NOT SUPPORTED < strong> Sails 0.12 。
要获得与 Sails 0.12 类似的效果,您可以使用以下内容:
Post
型号:
/**
* Post.js
*
* @description :: A model definition. Represents a database table/collection/etc.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
attributes: {
name: {
type: 'string',
required: true
},
// Many to many: Post has and belongs to many PostTag.
tags: {
collection: 'PostTag',
via: 'post'
}
};
Tag
型号:
/**
* Tag.js
*
* @description :: A model definition. Represents a database table/collection/etc.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
attributes: {
name: {
type: 'string',
unique: true,
required: true
},
// Many to many: Tag has and belongs to many PostTag.
posts: {
collection: 'PostTag',
via: 'tag',
}
}
};
我们的PostTag
模型(我们手动创建它,我们不希望Sails.js自动创建它):
/**
* PostTag.js
*
* @description :: A model definition. Represents a database table/collection/etc.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
attributes: {
post: {
model: 'Post'
},
tag: {
model: 'Tag'
},
customField: {
type: 'string'
}
}
};
PostTag
模型实际上是连接表。在此模型中,您可以定义额外的字段。
希望这有助于使用 Sails v0.12 的人。