Page Contents

See also: Смотри также: Справочная информация по APIr loopback-datasource-juggler.

Обзор

LoopBack обеспечивает единное API для обнаружения информации определенной модели из реляционных баз данных. То же самое обнаружение API доступно при использовании любого из этих соединителей:

  • Oracle: loopback-connector-oracle
  • MySQL: loopback-connector-mysql
  • PostgreSQL: loopback-connector-postgresql
  • SQL Server: loopback-connector-mssql

Синхронные методы

Способы, описанные ниже, являются асинхронными. Для Oracle, есть также соответствующие синхронные методы, которые выполняют те же самые вещи и возвращают те же результаты:

  • discoverModelDefinitionsSync(опции)
  • discoverModelPropertiesSync(таблица, опции)
  • discoverPrimaryKeysSync(таблица, опции)
  • discoverForeignKeysSync(таблица, опции)
  • discoverExportedForeignKeysSync(таблица, опции)

Примечание синхронные методы влияют на производительность

Методы

discoverAndBuildModels

Обнаруживает и строит модель из спецификации Discover и строит модели для  указанной owner/modelName.

dataSource.discoverAndBuildModels(_modelName_ [, _options_] [, _cb_])
``` 

Аргументы

<table>
  <tbody>
    <tr>
      <th>Имя</th>
      <th>Тип</th>
      <th>Описание</th>
    </tr>
    <tr>
      <td>modelName</td>
      <td><code>Строка</code></td>
      <td>
        <p>Имя модели</p>
      </td>
    </tr>
    <tr>
      <td>[options]</td>
      <td><code>Объект</code></td>
      <td>
        <p>Опции; см. ниже.</p>
      </td>
    </tr>
    <tr>
      <td>[cb]</td>
      <td><code>Функция</code></td>
      <td>
        <p>Функция обратного вызова</p>
      </td>
    </tr>
  </tbody>
</table>

Опции

<table>
  <tbody>
    <tr>
      <th><span style="color: rgb(26,85,51);">Имя</span></th>
      <th><span style="color: rgb(26,85,51);">Тип</span></th>
      <th><span style="color: rgb(26,85,51);">Описание</span></th>
    </tr>
    <tr>
      <td>owner / schema</td>
      <td><span style="font-family: monospace;">Строка</span></td>
      <td>
        <p>Владелец базы данных или имя схемы.</p>
      </td>
    </tr>
    <tr>
      <td>relations</td>
      <td>Булевое значение</td>
      <td>
        <p>Правда если введутся отношения (первичный ключ/внешний ключ); <span>ложь в противном случае.</span></p>
      </td>
    </tr>
    <tr>
      <td>all</td>
      <td><span>Булевое</span><span> значение</span></td>
      <td>
        <p>Правда, если все владельцы включены; ложь в противном случае.</p>
      </td>
    </tr>
    <tr>
      <td>views</td>
      <td><span>Булевое</span><span> значение</span></td>
      <td>
        <p>Правда, если <span>представление</span> включено; ложь в противном случае.</p>
      </td>
    </tr>
  </tbody>
</table>

### discoverModelDefinitions

Вызов `discoverModelDefinitions()` чтобы обнаружить определения модели (имена таблиц или коллекции), на основе таблиц или коллекций в источнике данных. Этот метод возвращает список имен таблиц / представлений.

`discoverModelDefinitions(_options_, _cb_)`

#### Параметры

<table>
  <tbody>
    <tr>
      <td>options</td>
      <td>Объект со свойствами, описанными ниже.</td>
    </tr>
    <tr>
      <td>cb</td>
      <td>Получить список имен таблица / <span>представление</span>; смотрите пример ниже.</td>
    </tr>
  </tbody>
  <thead>
    <tr>
      <th>
        <div class="tablesorter-header-inner">Параметр</div>
      </th>
      <th>
        <div class="tablesorter-header-inner"><span style="color: rgb(26,85,51);">Описание</span></div>
      </th>
    </tr>
  </thead>
</table>

#### Опции

<table>
  <tbody>
    <tr>
      <th><span style="color: rgb(26,85,51);">Свойство</span></th>
      <th><span style="color: rgb(26,85,51);">Тип</span></th>
      <th><span style="color: rgb(26,85,51);">Описание</span></th>
    </tr>
    <tr>
      <td>all</td>
      <td><span>Булевое значение</span></td>
      <td>Если это правда, включит таблицы / <span>представления</span> для всех схем / владельцев</td>
    </tr>
    <tr>
      <td>owner/schema</td>
      <td>Строка</td>
      <td>Имя схема/владелец</td>
    </tr>
    <tr>
      <td>views</td>
      <td><span>Булевое значение</span></td>
      <td>Если правда включит <span>представление</span></td>
    </tr>
  </tbody>
</table>

Пример обратного вызова возвращаемого значения функции:

{type: ‘table’, name: ‘INVENTORY’, owner: ‘STRONGLOOP’ } {type: ‘table’, name: ‘LOCATION’, owner: ‘STRONGLOOP’ } {type: ‘view’, name: ‘INVENTORY_VIEW’, owner: ‘STRONGLOOP’ }


**Пример**

Например:

```js
datasource.discoverModelDefinitions(function(err, models) {
  models.forEach(function(def) {
    // def.name ~ the model name
    datasource.discoverSchema(null, def.name, function(err, schema) {
      console.log(schema);
    });
  });
});

discoverModelProperties

Вызовите discoverModelProperties (), чтобы открыть метаданные в столбцах (свойства) из таблицы базы данных. Этот метод возвращает информацию столбца для данной таблицы / представления.

discoverModelProperties(_table_, _options_, _cb_)

table Имя таблицы или вида
options Опциональный объект который может иметь только "владелец/схема" свойство для указания владельца или имени схемы
cb Обратный вызов функции возвращает список свойств модели; смотрите пример ниже.
Параметр
Описание

Пример возвращаемого значения функции обратного вызова:

{ owner: 'STRONGLOOP',
        tableName: 'PRODUCT',
        columnName: 'ID',
        dataType: 'VARCHAR2',
        dataLength: 20,
        nullable: 'N',
        type: 'String' }
      { owner: 'STRONGLOOP',
        tableName: 'PRODUCT',
        columnName: 'NAME',
        dataType: 'VARCHAR2',
        dataLength: 64,
        nullable: 'Y',
        type: 'String' }

discoverPrimaryKeys

Вызовите discoverPrimaryKeys() чтобы обнаружить первичные ключевые определения в базе данных.

discoverPrimaryKeys(_table_, _options_, _cb_)

table Имя таблицы или представления
options Опциональный объект который может иметь только "владелец/схема" свойство для указания владельца или имени схемы
cb Возвратная функция, которая возвращает список свойств модели; смотри пример ниже.
Параметр
Описание

Пример возвращаемого значения функции обратного вызова:

{
  { owner: 'STRONGLOOP',
    tableName: 'INVENTORY',
    columnName: 'PRODUCT_ID',
    keySeq: 1,
    pkName: 'ID_PK' },
  { owner: 'STRONGLOOP',
    tableName: 'INVENTORY',
    columnName: 'LOCATION_ID',
    keySeq: 2,
    pkName: 'ID_PK' },
...
}

discoverForeignKeys

Вызови discoverForeignKeys() чтобы обнаружить внешний определения ключей из базы данных.

discoverForeignKeys(_table_, _options_, _cb_)

table Имя таблицы или представления
options Опциональный объект который может иметь только "владелец/схема" свойство для указания владельца или имени схемы
cb Возвратная функция, которая возвращает список свойств модели; смотри пример ниже.
Параметр
Описание

Пример возвращаемого значения функции обратного вызова:

{ fkOwner: 'STRONGLOOP',
      fkName: 'PRODUCT_FK',
      fkTableName: 'INVENTORY',
      fkColumnName: 'PRODUCT_ID',
      keySeq: 1,
      pkOwner: 'STRONGLOOP',
      pkName: 'PRODUCT_PK',
      pkTableName: 'PRODUCT',
      pkColumnName: 'ID' }

discoverExportedForeignKeys

Вызовите discoverExportedForeignKeys() чтобы обнаружить внешние ключи определений, которые экспортируются из базы данных.

discoverExportedForeignKeys(_table_, _options_, _cb_)

table Имя таблицы или представления
options Опциональный объект который может иметь только "владелец/схема" свойство для указания владельца или имени схемы
cb Возвратная функция, которая возвращает список свойств модели; смотри пример ниже.
Параметр
Описание

Пример возвращаемого значения функции обратного вызова:

{ fkName: 'PRODUCT_FK',
      fkOwner: 'STRONGLOOP',
      fkTableName: 'INVENTORY',
      fkColumnName: 'PRODUCT_ID',
      keySeq: 1,
      pkName: 'PRODUCT_PK',
      pkOwner: 'STRONGLOOP',
      pkTableName: 'PRODUCT',
      pkColumnName: 'ID' }

discoverSchemas

Use discoverSchema чтобы обнаружить модели LDL из базы данных. Начинается с одной таблицы / представления, если  relations опция установлена как trueStarting with one table/view, if the relations option is set to true, она следует внешним ключам, чтоб обнаружить связанные моделиi.

discoverSchema(_modelName_ [, _options_] [, _cb_])Свойства параметра опции:

Свойство Тип Описание
modelName Строка Название определяемой модели
options Объект  
cb Функция Возвратная функция

Options

Имя Тип Описание
owner / schema Строка

Владелец базы данных или имя схемы.

relations Булевое значение

Если правда, функция будет следовать внешних ключевых отношений, чтобы обнаружить связанные таблицы.

all Булевое значение

Правда, чтобы включить всех владельцев; ложь в противном случае.

views Булевое значение

Правда, чтобы включить представление; ложь в противном случае.

Пример

/server/script.js

dataSource.discoverSchema('INVENTORY', {owner: 'STRONGLOOP'}, function (err, schema) {
    ...
}

Результат показан ниже.

/common/models/model.json

{
  "name": "Inventory",
  "options": {
    "idInjection": false,
    "mysql": {
      "schema": "STRONGLOOP",
      "table": "INVENTORY"
    }
  },
  "properties": {
    "productId": {
      "type": "String",
      "required": false,
      "length": 60,
      "precision": null,
      "scale": null,
      "id": 1,
      "mysql": {
        "columnName": "PRODUCT_ID",
        "dataType": "varchar",
        "dataLength": 60,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "NO"
      }
    },
    "locationId": {
      "type": "String",
      "required": false,
      "length": 60,
      "precision": null,
      "scale": null,
      "id": 2,
      "mysql": {
        "columnName": "LOCATION_ID",
        "dataType": "varchar",
        "dataLength": 60,
        "dataPrecision": null,
        "dataScale": null,
        "nullable": "NO"
      }
    },
    "available": {
      "type": "Number",
      "required": false,
      "length": null,
      "precision": 10,
      "scale": 0,
      "mysql": {
        "columnName": "AVAILABLE",
        "dataType": "int",
        "dataLength": null,
        "dataPrecision": 10,
        "dataScale": 0,
        "nullable": "YES"
      }
    },
    "total": {
      "type": "Number",
      "required": false,
      "length": null,
      "precision": 10,
      "scale": 0,
      "mysql": {
        "columnName": "TOTAL",
        "dataType": "int",
        "dataLength": null,
        "dataPrecision": 10,
        "dataScale": 0,
        "nullable": "YES"
      }
    }
  }
}

Пример построения моделей через обнаружение

Следующий пример использует discoverAndBuildModels (), чтобы обнаружить, построить и проверить модели.

Обратите внимание, что строка arguments этой функции чувствительна к регистру; специально имя таблицы (в примере ниже, ‘account’) и имя владельца (схема)  (в примере ниже, ‘demo’).

/server/script.js

dataSource.discoverAndBuildModels('account', {
  owner: 'demo'
}, function(err, models) {
  models.Account.find(function(err, act) {
    if (err) {
      console.error(err);
    } else {
      console.log(act);
    }
    dataSource.disconnect();
  });
});