如何在Loopback4中添加外键?

时间:2019-01-19 10:58:02

标签: mysql node.js loopbackjs strongloop

As per this discussion和其他资源可用于v3及更早版本,但是我找不到使用 loopback 4 直接添加外键的方法,因此当我从模型中我仍然具有外键约束。

这是我到目前为止所拥有的,但是迁移完成后我无法获得外键。

我的模特:

export class TodoList extends Entity {
  @hasMany(() => Todo, { keyTo: 'todoListId' })
  todos?: Todo[];
  @property({
    type: 'string',
  })
  todoListId: number;

我的存储库:

export class TodoListRepository extends DefaultCrudRepository<
  TodoList,
  typeof TodoList.prototype.id
  > {
  public readonly todos: HasManyRepositoryFactory<
    Todo,
    typeof Todo.prototype.id
    >;
  constructor(
    @inject('datasources.todo') dataSource: TodoDataSource,
    @repository.getter(TodoRepository)
    protected todoRepositoryGetter: Getter<TodoRepository>,
  ) {
    super(TodoList, dataSource);
    this.todos = this.createHasManyRepositoryFactoryFor(
      'todos',
      todoRepositoryGetter,
    );
  }
}

我正在使用MySQL作为数据源。但是当我运行npm run migrate时,不会创建外键。

我想将toDoListId列作为todo模型的外键。 Here's the tutorial I'm following

2 个答案:

答案 0 :(得分:1)

看起来必须在模型设置中定义外键。我不确定磅2和磅3是否是这种情况,但是我能够在lb4中使用它。

此外,我认为您必须在Todo模型上创建此特定密钥。

@model({
    settings: {
        "foreignKeys": {
            "todoListId": {
                "name": "todoListId",
                "foreignKey": "todoListId",
                "entityKey": "id",
                "entity": "TodoList"
            }
        }
    }
})
export class Todo extends Entity { ...

https://loopback.io/doc/en/lb3/MySQL-connector.html#auto-migrateauto-update-models-with-foreign-keys

答案 1 :(得分:0)

找到了答案here,除了将设置添加到@model批注之外,您还必须进行更改以指定应按哪个顺序创建表格