Loopbackjs 环回4包括嵌套关系

Loopbackjs 环回4包括嵌套关系,loopbackjs,loopback4,Loopbackjs,Loopback4,最近,环回团队增加了对嵌套关系包含的支持。参考 但它没有覆盖RESTAPI url以获取嵌套关系。这就是我尝试过的 我有三种型号的用户,手推车,产品。用户有很多推车,推车属于产品。 我的环回/cli版本是1.27.0 user.repository.ts constructor( @inject('datasources.farm') dataSource: FarmDataSource, @repository.getter('CartRepository') protected c

最近,环回团队增加了对嵌套关系包含的支持。参考 但它没有覆盖RESTAPI url以获取嵌套关系。这就是我尝试过的

我有三种型号的用户,手推车,产品。用户有很多推车,推车属于产品。 我的环回/cli版本是1.27.0

user.repository.ts

constructor(
    @inject('datasources.farm') dataSource: FarmDataSource,  @repository.getter('CartRepository') protected cartRepositoryGetter: Getter<CartRepository>,
  ) {
    super(Users, dataSource);
    this.carts = this.createHasManyRepositoryFactoryFor('carts', cartRepositoryGetter,);
    this.registerInclusionResolver('carts', this.carts.inclusionResolver);

  }
 constructor(
    @inject('datasources.farm') dataSource: FarmDataSource, @repository.getter('UsersRepository') protected usersRepositoryGetter: Getter<UsersRepository>, @repository.getter('ProductRepository') protected productRepositoryGetter: Getter<ProductRepository>,
  ) {
    super(Cart, dataSource);
    this.product = this.createBelongsToAccessorFor('product_id', productRepositoryGetter);
    this.registerInclusionResolver('product', this.product.inclusionResolver);

    this.users = this.createBelongsToAccessorFor('user_id', usersRepositoryGetter);
    this.registerInclusionResolver('users', this.users.inclusionResolver);
  }
}
constructor(
    @inject('datasources.farm') dataSource: FarmDataSource, @repository.getter('PurchaseRepository') protected purchaseRepositoryGetter: Getter<PurchaseRepository>, @repository.getter('StockRepository') protected stockRepositoryGetter: Getter<StockRepository>, ) {
    super(Product, dataSource);


    this.registerInclusionResolver('stocks', this.stocks.inclusionResolver);
    this.registerInclusionResolver('purchases', this.purchases.inclusionResolver);

  }
cart.repository.ts

constructor(
    @inject('datasources.farm') dataSource: FarmDataSource,  @repository.getter('CartRepository') protected cartRepositoryGetter: Getter<CartRepository>,
  ) {
    super(Users, dataSource);
    this.carts = this.createHasManyRepositoryFactoryFor('carts', cartRepositoryGetter,);
    this.registerInclusionResolver('carts', this.carts.inclusionResolver);

  }
 constructor(
    @inject('datasources.farm') dataSource: FarmDataSource, @repository.getter('UsersRepository') protected usersRepositoryGetter: Getter<UsersRepository>, @repository.getter('ProductRepository') protected productRepositoryGetter: Getter<ProductRepository>,
  ) {
    super(Cart, dataSource);
    this.product = this.createBelongsToAccessorFor('product_id', productRepositoryGetter);
    this.registerInclusionResolver('product', this.product.inclusionResolver);

    this.users = this.createBelongsToAccessorFor('user_id', usersRepositoryGetter);
    this.registerInclusionResolver('users', this.users.inclusionResolver);
  }
}
constructor(
    @inject('datasources.farm') dataSource: FarmDataSource, @repository.getter('PurchaseRepository') protected purchaseRepositoryGetter: Getter<PurchaseRepository>, @repository.getter('StockRepository') protected stockRepositoryGetter: Getter<StockRepository>, ) {
    super(Product, dataSource);


    this.registerInclusionResolver('stocks', this.stocks.inclusionResolver);
    this.registerInclusionResolver('purchases', this.purchases.inclusionResolver);

  }
product.repository.ts

constructor(
    @inject('datasources.farm') dataSource: FarmDataSource,  @repository.getter('CartRepository') protected cartRepositoryGetter: Getter<CartRepository>,
  ) {
    super(Users, dataSource);
    this.carts = this.createHasManyRepositoryFactoryFor('carts', cartRepositoryGetter,);
    this.registerInclusionResolver('carts', this.carts.inclusionResolver);

  }
 constructor(
    @inject('datasources.farm') dataSource: FarmDataSource, @repository.getter('UsersRepository') protected usersRepositoryGetter: Getter<UsersRepository>, @repository.getter('ProductRepository') protected productRepositoryGetter: Getter<ProductRepository>,
  ) {
    super(Cart, dataSource);
    this.product = this.createBelongsToAccessorFor('product_id', productRepositoryGetter);
    this.registerInclusionResolver('product', this.product.inclusionResolver);

    this.users = this.createBelongsToAccessorFor('user_id', usersRepositoryGetter);
    this.registerInclusionResolver('users', this.users.inclusionResolver);
  }
}
constructor(
    @inject('datasources.farm') dataSource: FarmDataSource, @repository.getter('PurchaseRepository') protected purchaseRepositoryGetter: Getter<PurchaseRepository>, @repository.getter('StockRepository') protected stockRepositoryGetter: Getter<StockRepository>, ) {
    super(Product, dataSource);


    this.registerInclusionResolver('stocks', this.stocks.inclusionResolver);
    this.registerInclusionResolver('purchases', this.purchases.inclusionResolver);

  }

提前感谢

我已经成功实现了与MySQL的关系作为数据源。文档确实分享了使用非关系数据库会产生意外行为的信息。如果这是你的情况,那么你应该检查他们的进展

我们的示例模型将是问题源和响应目标。问题与回答有许多关系

配置模型以处理关系,一次一个关系

您应该使用@hasMany decorator将一个新属性添加到您的问题模型中,该属性将如下所示

@hasMany=>Response,{keyTo:'question_id',name:'responses'} 回应?:回应[]

请注意,keyTo是允许关系工作的外键,name只是关系的名称

如果尚未定义外键属性,请在问题模型中添加该属性。可以使用常规的@property装饰器或类似的工具来完成

@belongsTo=>Question,{name:'Question',keyTo:'Question_id'} 问题_id?:编号

在源模型存储库问题中,您需要提供对目标模型响应的访问,类似于以下内容:

export class QuestionRepository extends DefaultCrudRepository<
  Question,
  typeof Question.prototype.question_id,
  QuestionRelations
  > {
  public readonly responses: HasManyRepositoryFactory<
    Response,
    typeof Question.prototype.question_id
  >;
  constructor (
    @inject('datasources.myDB') dataSource: MyDBDataSource,
    @repository.getter('ResponseRepository') responseRepository: Getter<ResponseRepository>,
  ) {
    super(Question, dataSource);
    this.responses = this.createHasManyRepositoryFactoryFor(
      'responses',
      responseRepository
    );
    this.registerInclusionResolver('responses', this.responses.inclusionResolver);
  }
}

我已经成功地实现了与MySQL作为数据源的关系。文档确实分享了使用非关系数据库会产生意外行为的信息。如果这是你的情况,那么你应该检查他们的进展

我们的示例模型将是问题源和响应目标。问题与回答有许多关系

配置模型以处理关系,一次一个关系

您应该使用@hasMany decorator将一个新属性添加到您的问题模型中,该属性将如下所示

@hasMany=>Response,{keyTo:'question_id',name:'responses'} 回应?:回应[]

请注意,keyTo是允许关系工作的外键,name只是关系的名称

如果尚未定义外键属性,请在问题模型中添加该属性。可以使用常规的@property装饰器或类似的工具来完成

@belongsTo=>Question,{name:'Question',keyTo:'Question_id'} 问题_id?:编号

在源模型存储库问题中,您需要提供对目标模型响应的访问,类似于以下内容:

export class QuestionRepository extends DefaultCrudRepository<
  Question,
  typeof Question.prototype.question_id,
  QuestionRelations
  > {
  public readonly responses: HasManyRepositoryFactory<
    Response,
    typeof Question.prototype.question_id
  >;
  constructor (
    @inject('datasources.myDB') dataSource: MyDBDataSource,
    @repository.getter('ResponseRepository') responseRepository: Getter<ResponseRepository>,
  ) {
    super(Question, dataSource);
    this.responses = this.createHasManyRepositoryFactoryFor(
      'responses',
      responseRepository
    );
    this.registerInclusionResolver('responses', this.responses.inclusionResolver);
  }
}