Sails.js сохраняет несколько ассоциаций

Я создаю очень простой API с парусами, который обрабатывает participants и teams . В командах может быть несколько участников, поэтому API должен принимать несколько идентификаторов participants для создания отношений при создании новой команды.

Модель участника

attributes: {

  name:{
    type : 'string',
    required : true
  },
  email : {
    type : 'email',
    required : true,
    unique : true,
  },
  age : {
    type : 'string'
  }

}

Модель команды

attributes: {

    name:{
        type : 'string',
        required : true
    },
    logo : {
        type : 'string'

    },
    participants:{
        model: 'participant'
    }
}

Я могу создать команду и успешно сохранить отношения с одним участником, передав следующий JSON в API:

{
   "name" : "Best Team ever",
   "logo" : "http://...."
   "participants" : "546bc4136911426a093cb903"
}

Но у меня возникли проблемы с сохранением отношений с несколькими участниками, я попытался передать массив идентификаторов в API, но он не сохраняет никаких отношений, ни передачи, ни объекта идентификаторов.

Я хотел бы сохранить отношения с несколькими участниками по одному запросу.

Могу ли я завершить это поведение с помощью отношений парусов и чертежей? или я должен сделать это вручную в контроллере

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

Я использую sails-mongo на всякий случай.


person kevinblanco    schedule 18.11.2014    source источник


Ответы (1)


Да, это определенно возможно. Просто измените свою модель следующим образом:

attributes: {

    name:{
        type : 'string',
        required : true
    },
    logo : {
        type : 'string'

    },
    participants:{
        collection: 'participant',
        via: 'id'
    }
}

Затем вы можете передать массив идентификаторов участников при создании записи команды. Обратите внимание, однако, что поле участников не будет частью коллекции команды на уровне базы данных. Вместо этого Waterline автоматически создаст другую таблицу, содержащую сопоставление идентификатора участника и идентификатора команды. Имя таблицы будет примерно таким: member_id__team_participant или что-то в этом роде. Когда вы выбираете команду с помощью чертежей, массив участников будет заполнен. Однако, если вы используете find of findOne для получения записи команды, используйте приведенный ниже синтаксис для получения участников.

Team.findOne()
.populate('participants')
.exec(function (err, team){
  // do something here
})

Надеюсь, это решит вашу проблему. Дайте мне знать, если вы все еще сталкиваетесь с какими-либо проблемами

person Mandeep Singh    schedule 03.12.2014