Я использую loopback для проектирования API и моделирования данных. Я использую MySQL в качестве базы данных. Хотя мой URL-адрес для отдыха API успешно возвращает результаты, например /states/{id}/cities. У меня есть следующая модель, но, похоже, не добавлено никакого отношения внешнего ключа. Ниже приводится определение моей модели.

"state": {
  "options": {
    "relations": {
      "cities": {
        "type": "hasMany",
        "model": "city",
        "foreignKey": "stateId"
      }
    }
  },
  "properties": {
    "name": {
      "type": "string"
    }
  },
  "public": true,
  "dataSource": "db",
  "plural": "states"
},
"city": {
  "options": {
    "relations": {
      "state": {
        "type": "belongsTo",
        "model": "state",
        "foreignKey": "stateId"
      }
    }
  },
  "properties": {
    "name": {
      "type": "string"
    }
  },
  "public": true,
  "dataSource": "db",
  "plural": "cities"
}

А ниже - снимок экрана с таблицей городов. введите описание изображения здесь

И ниже скриншот таблицы состояний. введите описание изображения здесь

Возможно, я здесь делаю это неправильно. Жду любых указателей.

5
fusionstrings 2 Янв 2014 в 10:05

2 ответа

Лучший ответ

Кажется, что Loopback обрабатывает отношения в моделях с помощью запроса «WHERE», а не на основе отношений. Ниже приведены подробности.

https://github.com/strongloop/loopback-connector-mysql/issues/16

3
fusionstrings 8 Янв 2014 в 04:53

loopback-mysql-connector ПОДДЕРЖИВАЕТ добавление внешних ключей в базу данных MySQL с использованием automigrate и autoupdate в сочетании с ключом foreignKeys в определении модели. Но люди не знали об этой функции из-за отсутствия документации.

Они обновили документ после моего обсуждения с ними. Пожалуйста, проверьте их README еще раз: https://github.com/strongloop/loopback- Connector-mysql # автоматическая миграция

Проще говоря, ваш код должен быть:

bin / automigrate.js

var path = require('path');

var app = require(path.resolve(__dirname, '../server/server'));
var ds = app.datasources.db;
ds.autoupdate(null, function(err) {
  if (err) throw err;
  console.log('Finished migration');
  ds.disconnect();
});

common / models / book.json

{
  "name": "Book",
  "base": "PersistedModel",
  "idInjection": true,
  "properties": {
    "name": {
      "type": "string"
    }, "isbn": {
      "type": "string"
    },
  },
  "validations": [],
  "relations": {
    "author": {
      "type": "belongsTo",
      "model": "Author",
      "foreignKey": "authorId",
      "primaryKey": "id"
    }
  },
  "acls": [],
  "methods": {},
  "foreignKeys": {
    "authorId": {
      "name": "authorId",
      "foreignKey": "authorId",
      "entityKey": "id",
      "entity": "Author"
    }
  }
}

Затем запустите сценарий миграции для создания / обновления таблиц БД (у них будут внешние ключи):

node bin/automigrate.js
3
haotang 17 Июн 2017 в 08:52