Ern*_*nie 5 database-relations strongloop loopbackjs
我正在为学校平台开发 API。\n我想在开发过程中在启动脚本中迁移数据库并为其设定种子。
\n\n我可以创建学校实例、组实例和个人实例,但我不知道如何在个人实例和组实例之间添加关系(多对多)
\n\n这是我的 Person .json 文件:
\n\n{\n "name": "Person",\n "base": "User",\n "strict": true,\n "idInjection": true,\n "properties": {\n "name": {\n "type": "string",\n "required": true\n },\n "firstName": {\n "type": "string",\n "required": true\n }\n },\n "validations": [],\n "relations": {\n "groups": {\n "type": "hasAndBelongsToMany",\n "model": "Group"\n },\n "school": {\n "type": "belongsTo",\n "model": "School"\n }\n },\n "acls": [],\n "methods": []\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的 group.json 文件
\n\n{\n "name": "Group",\n "base": "PersistedModel",\n "strict": true,\n "idInjection": true,\n "properties": {\n "name": {\n "type": "string",\n "required": true\n }\n },\n "validations": [],\n "relations": {\n "people": {\n "type": "hasAndBelongsToMany",\n "model": "Person"\n },\n "school": {\n "type": "belongsTo",\n "model": "School"\n }\n },\n "acls": [],\n "methods": []\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的启动脚本:
\n\nvar async = require(\'async\');\n\nmodule.exports = function(app) {\n var mysqlDs = app.dataSources.mysqlDs;\n var boysNames = ["Lucas", "Liam", "Arthur", "Vince", "Noah", "Finn", "Mathis", "Louis", "Adam", "Jules", "Lars", "Seppe", "Stan", "Alexander", "Leon", "Kobe", "Victor", "Matteo", "Milan", "Mats", "Vic", "Wout", "Daan", "Senne", "Ferre", "Tuur", "Nathan", "Elias", "Warre", "Jack", "Felix", "Cas", "Thomas", "Lowie", "Robbe", "Lewis", "Rayan", "Nand", "Sem", "Maxim", "Emiel", "Jasper", "Oscar", "Mauro", "Sam", "Mohamed", "Luca", "Bent", "Ruben", "Simon", "Imran", "Jayden", "Lou", "Viktor", "Bas", "Lenn", "Rune", "Lukas", "Eden", "Emile"];\n var girlsNames = ["Emma", "Louise", "Elise", "Ella", "Marie", "Noor", "Lena", "Julie", "Lotte", "Olivia", "Anna", "Elena", "Mila", "Lore", "Fien", "Nina", "Lina", "Nora", "Laura", "Juliette", "Charlotte", "Lisa", "Amber", "Am\xc3\xa9lie", "Fleur", "Ren\xc3\xa9e", "Lily", "Sara", "Camille", "Hanne", "Luna", "Liv", "Roos", "Helena", "Sarah", "Sofia", "Janne", "Noa", "Jade", "Nore", "Fenna", "Axelle", "Kato", "Alice", "Aya", "Jana", "Lize", "Paulien", "Amelie", "Lucie", "Lara", "Zo\xc3\xab", "Mona", "Manon", "Leonie", "Ines", "Oona", "Laure", "Mira", "Febe"];\n var names = ["Jong","Jansen","Vries","Visser","Jans","Bakker","Dijk","Vos","Smit","Berg","Boer","Groot","Janssen","Jacobs","Veen","Bos","Bergman","Hendriks","Dekker","Mulder","Willems","Meijer","Graaf","Leeuwen","Vermeulen","Koster","Peeters","Brouwer","Kok","Peters","Smits","Linden","Vliet","Wit","Beekman","Bosch","Meer","Koning","Beek","Haan","Vermeer","Verhoeven","Bruijn","Jonge","Heuvel","Martens","Dam","Hoek","Pieters","Walle","Bruin","Timmermans","Prins","Wouters","Janssens","Blom","Velde","Loon","Lange","Maas","Mol","Dijkstra","Post","Wal","Maes","Dieleman","Hermans","Jager","Stam","Gerrits","Groen","Roos","Wijk","Kuiper","Broek","Leeuw","Lambert","Kroon","Verdonck","Geerts","Boon","Hoekstra","Schouten","Gastel","Brink","Goossens","Steen","Bleijenberg","Bijl","Dubois","Jonker","Rooij","Driel","Pol","Ruiter","Stevens","Horst","Verbeek","Mertens","Ende","Sanders","Driessen","Huisman","Kooij","Schipper","Waal","Laan","Scholten","Vink","Ven","Postma","Aerts","Santen","Roovers","Verhulst","Verschoor","Ham","Moerman","Rijn","Bax","Franken","Eijk","Martin","Bosman","Meulen","Veenstra","Mostert","Velden","Harms","Wolters","Zanten","Claes","Poot","Ridder","Ginkel","Doorn","Heijden","Oost","Os","Blok","Kramer","Simons","Kuipers","Rovers","Cornelis","Dupont","Valk","Zwart","Gerard","Verweij"]\n\n //first lets recreate all databases\n mysqlDs.automigrate(function(){\n console.log("tables recreated: let\'s seed");\n\n async.parallel({\n schools: async.apply(createSchools)\n // ....\n }, function(errFase1, resultsFase1) {\n if (errFase1) throw errFase1;\n\n async.parallel({\n groups: async.apply(createGroups, resultsFase1.schools),\n persons: async.apply(createStudents, resultsFase1.schools),\n }, function(errFase2, resultsFase2) {\n if (errFase2) throw errFase2;\n\n // ???????????????????????????????????\n\n // ??? HOW TO add a relation between the persons and the groups\n // a person must be able to live \n // in multiple groups\n\n });\n });\n });\n\n function createSchools(cb) {\n var School = app.models.School;\n School.create([\n {\n "name": "Harvard",\n "address": "xxx",\n "zip": "0000",\n "place": "yyy" \n },\n {\n "name": "Oxford",\n "address": "xxx",\n "zip": "0000",\n "place": "yyy" \n }\n ], cb);\n }\n\n\n\n function createGroups(schools,cb) {\n var Group = app.models.Group;\n Group.create([\n { "name": "Class 1", "schoolId": schools[0].id },\n { "name": "Class 2", "schoolId": schools[0].id },\n { "name": "Class 3", "schoolId": schools[0].id },\n { "name": "Class 4", "schoolId": schools[0].id },\n { "name": "Class 5", "schoolId": schools[0].id },\n { "name": "Class 6", "schoolId": schools[0].id },\n { "name": "Class 1", "schoolId": schools[1].id },\n { "name": "Class 2", "schoolId": schools[1].id },\n { "name": "Class 3", "schoolId": schools[1].id },\n { "name": "Class 4", "schoolId": schools[1].id },\n { "name": "Class 5", "schoolId": schools[1].id },\n { "name": "Class 6", "schoolId": schools[1].id },\n ], cb);\n }\n\n function createStudents(schools,cb) {\n var Person = app.models.Person;\n var students = [];\n for (var i = 0; i < 240; i++) {\n chooseFrom = (i%2 == 1) ? girlsNames : boysNames ;\n students.push({\n "name": names[i%names.length],\n "firstName": chooseFrom[i%chooseFrom.length],\n "username": "student"+i,\n "password": "testje",\n "email": "student"+i+"@mailinator.com",\n "emailVerified": true,\n "schoolId": schools[Math.floor(i/120)].id\n });\n };\n Person.create(students, cb);\n }\n};\nRun Code Online (Sandbox Code Playgroud)\n\n要将学生添加到小组中,我期望这样的事情可以解决问题:
\n\nGroup.findOne(function(err, group){\n console.log(group);\n group.people().add(students[0].id);\n})\nRun Code Online (Sandbox Code Playgroud)\n\n我找不到关于这个特定问题的任何教程。
\n\n我调试了引导脚本,并检查了组变量,它是一个模型构造函数。我猜我可以通过 people() 函数获取相关人员,但是如何将人员添加到特定组中?
\n| 归档时间: |
|
| 查看次数: |
2741 次 |
| 最近记录: |