дополнительные столбцы в ассоциации моделей sailsjs - PullRequest
0 голосов
/ 20 мая 2018

Как получить дополнительный столбец в postgres с ассоциацией моделей sailsjs?

Это пример моих двух моделей

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


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

С этим я получаю ассоциацию таблиц (много ко многим)

 id | challenge_userChallenge | users_challenges 

Мне нужна одна или несколько дополнительныхстолбцы типа "активный" или что-то в этом роде

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Хотя ответ Владислава Турака правильный для парусов v1.0 и выше, обратите внимание, что Через ассоциации НЕ ПОДДЕРЖИВАЕТСЯ в Паруса 0,12 .

Чтобы добиться аналогичного эффекта с Паруса 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 .

0 голосов
/ 20 мая 2018

Вы должны использовать через ассоциации .

Многие-ко-многим через ассоциации ведут себя так же, как ассоциации "многие-ко-многим", за исключением таблицы соединенияавтоматически создан для вас.В ассоциации «многие ко многим» вы определяете модель, содержащую два поля, которые соответствуют двум моделям, которые вы будете объединять.При определении ассоциации вы добавите сквозной ключ, чтобы показать, что следует использовать модель, а не таблицу автоматического объединения.

Давайте рассмотрим модели 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 на самом деле является таблицей соединений.В этой модели вы можете определить дополнительные поля.

Надеюсь, это поможет.

...