2016-05-12 3 views
0

В шлейфом я определили две модели с двойным многие-ко-многим следующим образом:Дважды много-ко-многим

action.json:

{ 
     "name": "Action", 
     "base": "PersistedModel", 
     "idInjection": true, 
     "options": { 
     "validateUpsert": true 
     }, 
     "properties": { 
     "text": { 
      "type": "string", 
      "required": true 
     } 
     }, 
     "validations": [], 
     "relations": { 
     "benchmark": { 
      "type": "hasAndBelongsToMany", 
      "model": "Course", 
      "foreignKey": "benchmark" 
     }, 
     "main": { 
      "type": "hasAndBelongsToMany", 
      "model": "Course", 
      "foreignKey": "main" 
     } 
     }, 
     "acls": [], 
     "methods": {} 
    } 

course.json :

{ 
     "name": "Course", 
     "base": "TrashModel", 
     "idInjection": true, 
     "options": { 
     "validateUpsert": true 
     }, 
     "properties": { 
     "name": { 
      "type": "string", 
      "required": true 
     } 
     }, 
     "validations": [], 
     "relations": { 
     "benchmark": { 
      "type": "hasAndBelongsToMany", 
      "model": "Action", 
      "foreignKey": "benchmark" 
     }, 
     "main": { 
      "type": "hasAndBelongsToMany", 
      "model": "Action", 
      "foreignKey": "main" 
     } 
     }, 
     "acls": [], 
     "methods": {} 
    } 

Теперь, когда я пытаюсь создать отношение между моделью действия и модель курса со следующим PUT запрос:

http://localhost:3000/api/courses/57331a4eeff440cb02c886ae/benchmark/rel/5731d60da2c6d238e3c3d9b3

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

http://localhost:3000/api/courses/57331a4eeff440cb02c886ae?filter=%7B%22include%22%3A%5B%22benchmark%22%2C%22main%22%5D%7D

я получаю:

{ 
     "name": "Introduction Lessons", 
     "id": "57331a4eeff440cb02c886ae", 
     "benchmark": [{ 
     "text": "text here", 
     "id": "5731d60da2c6d238e3c3d9b3" 
     }], 
     "main": [{ 
     "text": "text here", 
     "id": "5731d60da2c6d238e3c3d9b3" 
     }] 
    } 

Таким образом, очевидно, что действие теперь привязано через оба эталона как основное отношение. Как это произошло? Я неправильно настраиваю свои модели?

+0

, как будет ваш локальный будет работать в качестве моего локального хоста? ??!?! – brk

+0

@ user2181397 он не будет, у меня нет онлайн-демонстрации. – Palace

+0

Можете ли вы уточнить, чего вы пытаетесь достичь с помощью этого двойного отношения? Почему этого недостаточно? Я также смущен вашими внешними ключами. Можете ли вы объяснить, почему вы установили их так, как вы это сделали? –

ответ

1

Из того, что я понимаю, когда вы используете hasAndBelongsToMany relashionship, loopback использует сквозную таблицу, которую он автоматически управляет для вас.

Я считаю, что по умолчанию он вызывает себя From_modelTo_model. Для того, чтобы иметь две такие relashion, вам нужно сказать loopback, чтобы управлять им иначе, иначе они будут использовать то же самое через таблицу.

Попробуйте с через опции, такие как

Действие

"benchmark": { 
    "type": "hasAndBelongsToMany", 
    "model": "Course", 
    "foreignKey": "benchmark", 
    "through":"ActionCourseBenchmark" 
}, 
"main": { 
    "type": "hasAndBelongsToMany", 
    "model": "Course", 
    "foreignKey": "main", 
    "through":"ActionCourseMain" 
} 

курс

"benchmark": { 
    "type": "hasAndBelongsToMany", 
    "model": "Action", 
    "foreignKey": "benchmark", 
    "through":"ActionCourseBenchmark" 
}, 
"main": { 
    "type": "hasAndBelongsToMany", 
    "model": "Action", 
    "foreignKey": "main", 
    "through":"ActionCourseMain" 
} 

см this github issue для более подробной информации

+0

Спасибо за этот ответ! Несколько замечаний: вы можете использовать ту же самую модель для Action.benchmark как Course.benchmark (названную им CourseActionBenchmark). То же самое для Action.main и Course.main (называется it CourseActionMain). Также вам необходимо создать сквозные модели вручную. – Palace

Смежные вопросы