代码之家  ›  专栏  ›  技术社区  ›  hanego

环回4-字段中包含多个关系

  •  2
  • hanego  · 技术社区  · 7 年前

    我正在尝试用新的环回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,
        );
      }
    }
    

    当我这样做时,例如一个GeT-on订单,我有错误: 500 error: column "products" does not exist 在进一步挖掘的过程中,我可以看到SQL正在尝试检索字段 products 它只是一种关系。 有人知道我做错什么吗? 我使用pg作为db。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Miroslav BajtoÅ¡    7 年前

    我相信这是环回4中的一个错误。当你用 @hasMany ,decorator定义了引擎盖下的模型属性。见 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 因为它认为 产品 是一种财产。

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

    推荐文章