模型关联sailsjs中的额外列

时间:2018-05-20 15:00:19

标签: sails.js sails-postgresql

如何使用sailsjs模型关联在postgres中添加额外的列?

这是我的两个模型的一个例子

// Users.js attribute
...
challenges: {
  collection: 'challenge',
  via: 'userChallenge'
}


// Challenge.js attribute
...
userChallenge: {
  collection: 'users',
  via: 'challenges'
}
...

通过这个我获得表关联(多对多)

 id | challenge_userChallenge | users_challenges 

我需要一个或多个额外的列,例如“有效”或类似的

提前致谢

2 个答案:

答案 0 :(得分:2)

您应该使用through associations

  

通过关联的多对多行为与多对多行为相同   除了连接表之外的关联是自动的   为你创造。在多对多通过关联中,您定义了一个   包含两个对应于您将使用的两个模型的字段的模型   联合起来。定义关联时,您将添加   通过键来表明应该使用模型而不是   自动连接表。

我们以PostTag模型为例。 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 的人。