我正在使用LoopBack自动迁移在应用程序启动期间从模型创建MySQL数据库表。我的帐户模型与我的信用模型定义了hasAndBelongsToMany关系,反之亦然。
我正在尝试在帐户中创建贷方,但是出现SQL错误。 “错误:ER_PARSE_ERROR:您的SQL语法有错误;请在与MySQL服务器版本相对应的手册中找到在第1行的'3 ORDER BY id
LIMIT 1'附近使用的正确语法”
根据我的日志记录,似乎automigrate不会按照在automigrate.js文件中定义的顺序发生,并且LoopBack分配了一些任意顺序,这导致在尝试向其添加信用额时无法创建Account表。 ...
回送的顺序根据我的日志记录创建了自动迁移表,它首先创建了帐户,然后是creditaccounts,然后是credit ...我需要它是Account,credits,再是creditaccounts。
因此,我的问题是,在使用自动迁移时,如何控制LoopBack创建数据库表的顺序?还是我错过了什么?
我的server / boot / automigrate.js文件的压缩版本:
app.automigrate('account', function(err) {
server.models.Account.create({id:1}, function(err, record) {
//handle errors here
});
});
app.automigrate('credit', function(err) {
server.models.Credit.create({id:1}, function(err, record) {
//handle errors here
});
});
app.automigrate('creditaccount', function(err) {
server.models.Account.findById({id:1}, function(err, account) {
server.models.Credit.findById({id:1}, function(err, credit) {
account.credits.add(credit, function(err, creditaccount) {
//error handling
})
});
});
});
最佳答案
该解决方案与自动迁移无关,SQL错误是因为我试图使用对象作为第一个参数而不是id的原始参数来调用Account.findById,因此应该是:
app.automigrate('account', function(err) {
server.models.Account.create({id:1}, function(err, record) {
//handle errors here
});
});
app.automigrate('credit', function(err) {
server.models.Credit.create({id:1}, function(err, record) {
//handle errors here
});
});
app.automigrate('creditaccount', function(err) {
server.models.Account.findById(1, function(err, account) {
server.models.Credit.findById(1, function(err, credit) {
account.credits.add(credit, function(err, creditaccount) {
//error handling
})
});
});
});