postgresql - Loopback 4 - HasMany-relation inkluderad i fält
Jag försöker sätta upp relationen HasMany med det nya Loopback 4-ramverket. Jag har följande modell:
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);
}
}
Och förvaret som följer:
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,
);
}
}
När jag till exempel gör en hämtning av orders, får jag felen: 500 error: column "products" does not exist och när jag gräver lite mer kan jag se att SQL försöker hämta fälten products där det bara är en relation. Någon som har en idé om jag gör något fel? Jag använder pg som databasen.
Svar #1
Jag tror att detta är ett fel i LoopBack 4. När du dekorerar en klass egenskap med @hasMany, definierar dekoratören en modell egenskap i bakgrunden. Se här:
export function hasMany<T extends Entity>(
targetResolver: EntityResolver<T>,
definition?: Partial<HasManyDefinition>,
) {
return function(decoratedTarget: Object, key: string) {
property.array(targetResolver)(decoratedTarget, key);
// ...
};
}
När anslutningen frågar databasen försöker den inkludera kolumnen products i frågan, eftersom den tror att products är en egenskap.
Problemet spåras redan av https://github.com/strongloop/loopback-next/issues/1909, vänligen överväg att rösta på ärendet och delta i diskussionen.
