我正在使用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
      })
    });
  });
});

07-27 22:55