16

MySql で Strongloop を使用しようとしていますが、MySql データベースにテーブルを移行または自動的に作成する方法がわかりません。

モデルを MySql スキーマにエクスポートする方法は少なくともありますか、それともテーブルを手動で作成する必要がありますか?

私はmysqlデモアプリを試してみましたが、しばらくの間ドキュメントを調べましたが、うまくいきませんでした - http://docs.strongloop.com/display/DOC/MySQL+connector

ありがとう!

4

8 に答える 8

36

作成しまし/server/boot/autoupdate.jsた。アプリの起動時に実行されます。「model-config」および「datasources」JSON をロードし、すべてのモデルをそれらに定義されたデータソースに移行または更新します。

# /server/boot/autoupdate.js
module.exports = function(app) {
    var path = require('path');
    var models = require(path.resolve(__dirname, '../model-config.json'));
    var datasources = require(path.resolve(__dirname, '../datasources.json'));

    function autoUpdateAll(){
        Object.keys(models).forEach(function(key) {
            if (typeof models[key].dataSource != 'undefined') {
                if (typeof datasources[models[key].dataSource] != 'undefined') {
                    app.dataSources[models[key].dataSource].autoupdate(key, function (err) {
                        if (err) throw err;
                        console.log('Model ' + key + ' updated');
                    });
                }
            }
        });
    }

    function autoMigrateAll(){
        Object.keys(models).forEach(function(key) {
            if (typeof models[key].dataSource != 'undefined') {
                if (typeof datasources[models[key].dataSource] != 'undefined') {
                    app.dataSources[models[key].dataSource].automigrate(key, function (err) {
                        if (err) throw err;
                        console.log('Model ' + key + ' migrated');
                    });
                }
            }
        });
    }
    //TODO: change to autoUpdateAll when ready for CI deployment to production
    autoMigrateAll();
    //autoUpdateAll();

};
于 2015-06-29T15:27:22.187 に答える
12

app.startメソッドの前に次の行をserver.jsファイルに追加することで、モデルを簡単に移行できます。

app.datasources['mySqlConnection'].automigrate(['orders','customers', 'User', 'ACL'], function(err) {
     console.log(err);
});
  1. 必要に応じてモデルを配列に追加します。
  2. でアプリケーションを実行しますslc run

注:mySqlConnectionは接続名です。独自の接続名に置き換えてください。

于 2014-12-05T10:28:06.693 に答える
8

LoopBack はこれを自動移行と呼びます。これらのリンクを確認して、その用語を検索してください。

LoopBack モデルのレシピ、パート 5/5: リレーショナル データベースとのモデルの同期

データ ソースとコネクタ

于 2014-04-19T14:43:18.983 に答える
1

私の場合、手動で MySQL テーブルを作成してからモデルを作成しました。既存の MySQL テーブルの場合、プロパティ名が MySQL フィールドの名前と同じモデルを作成します。

MySQL データベースで StrongLoop LoopBack を使用する手順は次のとおりです。

  1. MySQL データベースとテーブルを作成します (または既存のデータベースを使用します)。
  2. を使用して MySQL コネクタをインストールします。npm install loopback-connector-mysql --save
  3. MySQL データベースの詳細をファイルに追加しdatasources.jsonます。
  4. slc lb model tablename -iOR edit models.jsonfileを使用して各テーブルのモデルを作成し、プロパティを手動で追加します。(ドキュメント: http://docs.strongloop.com/display/DOC/Creating+a+LoopBack+application#CreatingaLoopBackapplication-Creatingmodels )
  5. プロパティの名前は、MySQL フィールドの名前と同じにする必要があります (MySQL から JSON データ型へのマッピングの詳細: http://docs.strongloop.com/display/DOC/MySQL+connector#MySQLconnector-MySQLtoJSONtypes )
于 2014-04-19T14:37:06.323 に答える
0

jduhlsの答えは美しいですが、静的データをテーブルに追加するには、少し調整する必要がありました。これは、単純な SystemSettings テーブル (id、settingName、settingValue) にデータをロードする例とともに、微調整したバージョンです。

var async = require('async');

var SYSTEM_SETTINGS = [
  {
    "settingName": "mustPayInAdvance",
    "settingValue": "false",
  }
];

module.exports = function(app) {
    var path = require('path');
    var models = require(path.resolve(__dirname, '../model-config.json'));
    var datasources = require(path.resolve(__dirname, '../datasources.json'));
    var modelUpdates = [];

    function buildModelListForOperation(){
        Object.keys(models).forEach(function(key) {
            if (typeof models[key].dataSource != 'undefined') {
                if (typeof datasources[models[key].dataSource] != 'undefined') {
                    modelUpdates.push({operation: app.dataSources[models[key].dataSource], key: key});
                }
            }
        });
    }

    function createStaticData() {
        app.models.SystemSettings.create(SYSTEM_SETTINGS, function(err, created) {
            if (err) 
                throw err;
            else
                console.log('Sample data was imported.');
        });
    }

    function processModelsAndData(operationType) {
        buildModelListForOperation();

        // Create all models
        async.each(modelUpdates, function(item, callback) {
            item.operation[operationType](item.key, function (err) {
                if (err) throw err;
                console.log('Model ' + item.key + ' migrated');
                callback();
            });
        }, function (err) {
            if (err) throw err;
            createStaticData();
        });    
    }

    //TODO: change to 'autoupdate' when ready for CI deployment to production
    processModelsAndData('automigrate');
};
于 2016-09-05T18:31:31.910 に答える
0

同じ種類の問題で、データベースを自動的に作成する必要があるcreateDatabase場合は、dataSource JSON ファイルでオプションを使用できます。

  "mysql": {
    "host": "localhost",
    "port": 0,
    "database": "db",
    "username": "root",
    "password": "",
    "name": "mysql",
    "connector": "mysql",
    "debug": false,
    "createDatabase": true
  }

そのため、ベースを作成するためにクエリを自分で作成する必要はありません。それが役に立てば幸い。

于 2015-02-05T14:54:17.493 に答える