postgresql - 环回 4 - 字段中包含的 HasMany 关系

标签 postgresql typescript loopback

我正在尝试使用新的 Loopback 4 框架设置 HasMany 关系。 我有以下模型:

import {Entity, model, property, belongsTo, hasMany} from 

'@loopback/repository';
import {User} from "./user.model";
import {OrderProduct} from "./order-product.model";

@model({
  name: 'sales_order'
})
export class Order extends Entity {
  @property({
    type: 'number',
    id: true,
    required: true,
  })
  id: number;

  @property({
    type: 'number',
    required: true,
  })
  total_amount: number;

  @belongsTo(() => User)
  user_id: number;

  @hasMany(() => OrderProduct, {keyTo: 'order_id'})
  products?: OrderProduct[];

  constructor(data?: Partial<Order>) {
    super(data);
  }
}

存储库如下:

import {DefaultCrudRepository, repository, HasManyRepositoryFactory, BelongsToAccessor} from '@loopback/repository';
import {Order, OrderProduct, User} from '../models';
import {DbDataSource} from '../datasources';
import {inject, Getter} from '@loopback/core';
import {OrderProductRepository} from "./order-product.repository";
import {UserRepository} from "./user.repository";

export class OrderRepository extends DefaultCrudRepository<
  Order,
  typeof Order.prototype.id
> {

  public readonly user: BelongsToAccessor<
      User,
      typeof Order.prototype.id
    >;

  public readonly products: HasManyRepositoryFactory<
      OrderProduct,
      typeof Order.prototype.id
  >;

  constructor(
    @inject('datasources.db') dataSource: DbDataSource,
    @repository.getter(OrderProductRepository)
        getOrderProductRepository: Getter<OrderProductRepository>,
    @repository.getter('UserRepository')
        userRepositoryGetter: Getter<UserRepository>,
  ) {
    super(Order, dataSource);

    this.products = this._createHasManyRepositoryFactoryFor(
        'products',
        getOrderProductRepository,
    );

    this.user = this._createBelongsToAccessorFor(
        'user_id',
        userRepositoryGetter,
    );
  }
}

例如,当我执行获取订单时,出现错误:500 错误:“产品”列不存在,进一步挖掘,我可以看到 SQL 正在尝试检索字段 products 它只是一个关系。 如果我做错了什么,有人知道吗? 我正在使用 pg 作为数据库。

最佳答案

我认为这是 LoopBack 4 中的错误。当您使用 @hasMany 装饰类属性时,装饰器会在底层定义模型属性。参见 here :

export function hasMany<T extends Entity>(
  targetResolver: EntityResolver<T>,
  definition?: Partial<HasManyDefinition>,
) {
  return function(decoratedTarget: Object, key: string) {
    property.array(targetResolver)(decoratedTarget, key);

    // ...
  };
}

当连接器查询数据库时,它会尝试在查询中包含列 products,因为它认为 products 是一个属性。

问题已被 https://github.com/strongloop/loopback-next/issues/1909 跟踪,请考虑对该问题投赞成票并加入讨论。

关于postgresql - 环回 4 - 字段中包含的 HasMany 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52931333/

相关文章:

javascript - Visual Studio 2017 TypeScript 无法保存

javascript - 使用 webpack 优化 Angular 2 应用程序构建持续时间

reactjs - Jest 找到测试但不收集覆盖范围

strongloop - 找不到环回 CLI lb-clean 命令 - linux

sql - 在 postgres 中使用 CTE 更新插入

sql - PostgreSQL Group By A,但仍拉取B字段

django - 来自django查询的饼图highcharts

ruby-on-rails - 英雄数据库 :pull failing due to lack of password when I haven't specified a password

c - 如果启用环回,为什么发件人没有收到其多播 UDP 数据包?

visual-studio - Android Emulator 环回 IIS Express 不起作用,但可以与 Cassini 一起使用