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}\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}\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};\n要将学生添加到小组中,我期望这样的事情可以解决问题:
\n\nGroup.findOne(function(err, group){\n    console.log(group);\n    group.people().add(students[0].id);\n})\n我找不到关于这个特定问题的任何教程。
\n\n我调试了引导脚本,并检查了组变量,它是一个模型构造函数。我猜我可以通过 people() 函数获取相关人员,但是如何将人员添加到特定组中?
\n| 归档时间: | 
 | 
| 查看次数: | 2741 次 | 
| 最近记录: |