Page Contents
概要
LoopBack は、既存のリレーショナル・データベースからモデルを作成することが簡単にできます。 この処理は_発見_と呼ばれ、以下のコネクタで使用可能です。
- MySQL コネクタ
- PostgreSQL コネクタ
- Oracle コネクタ
- SAP HANA - Not officially supported; see Community connectors.
- SQL Server コネクタ
MongoDBのようなNoSQLデータベースについては、代わりに instance introspectionを使います。
リレーショナルデータベースに接続されたデータソースは、自動的に非同期の~データベース発見APIが使えます。
基本的な手続き
基本的な手続きは以下のとおりです。
- アプリケーションで使用するモデルの定義を、スクリプトを実行して発見する。 詳しくは、下の例を参照。
fs.writeFile()
を使って、出力をcommon/models/model-name.json
に保存する。- 新しいモデルのエントリを
server/model-config.json
に追加する。 -
アプリケーションを実行する。
$ node .
- LoopBack Explorerを使って、スキーマが正しく定義されているか確認する。
発見のサンプル
例えば、Oracleデータベースの場合を考えます。まず、Oracleデータソースをセットアップします。
そして、discoverAndBuildModels()
を呼び出すと、データベースのテーブルからモデルが作られます。
associations: true
オプションをつけて実行すると、プライマリ/外部キーの関係も辿るようになります。
var loopback = require('loopback');
var ds = loopback.createDataSource('oracle', {
"host": "oracle-demo.strongloop.com",
"port": 1521,
"database": "XE",
"username": "demo",
"password": "L00pBack"
});
// INVENTORY テーブルからモデルを発見・作成する。
ds.discoverAndBuildModels('INVENTORY', {visited: {}, associations: true},
function (err, models) {
// モデル名をキーに持つモデルのリストが使えます。
// inventory の最初のレコードを取得します。
models.Inventory.findOne({}, function (err, inv) {
if(err) {
console.error(err);
return;
}
console.log("\nInventory: ", inv);
// product モデルに導いています。
// inventory テーブルが、product テーブルに対して外部キー関係を持っていることを仮定しています。
inv.product(function (err, prod) {
console.log("\nProduct: ", prod);
console.log("\n ------------- ");
});
});
});
さらなる発見の関数
いくつかのコネクタは、データソースを使って、既存のデータベーススキーマからモデルの定義を発見することができます。 以下のAPIは、データベーススキーマ定義を発見し、LoopBackモデルを構築するために使うことができます。
discoverModelDefinitions()
は、既定ではデータベースに接続しているユーザが所有しているデータベーススキーマを発見します。
all: true
オプションをつけて実行することで、全てのスキーマを発見の対象に含められます。
// データベースのテーブル・ビューを列挙する
ds.discoverModelDefinitions({views: true, limit: 20}, cb);
// 与えられたテーブル/ビューの列を列挙する
ds.discoverModelProperties('PRODUCT', cb);
ds.discoverModelProperties('INVENTORY_VIEW', {owner: 'STRONGLOOP'}, cb);
// 与えられたテーブルのプライマリキーを列挙する
ds.discoverPrimaryKeys('INVENTORY', cb);
// 与えられたテーブルの外部キーを列挙する
ds.discoverForeignKeys('INVENTORY', cb);
// 与えられたテーブルのプライマリキーを外部キーとして参照している者を列挙する
ds.discoverExportedForeignKeys('PRODUCT', cb);
// 与えられたテーブルからモデル定義を発見によって作成する
ds.discoverSchema(table, {owner: 'STRONGLOOP'}, cb);