Използвам loopback 4 и loopback cli версията е 2.2.1 и използвам MongoDB конектор като мой източник на данни. Когато се опитвам да филтрирам данни с помощта на API Explorer, не мога да извлека подробности за поръчката, връзката hasMany не работи както се очаква, но при заявка за поръчка мога да получа подробности за клиента.
използвана заявка:
/customers?filter={"include":[{"relation":"orders"}]}
Модел на клиента
import {Entity, model, property, hasMany} from '@loopback/repository';
import {Order} from './order.model';
@model()
export class Customer extends Entity {
@property({
type: 'string',
id: true,
generated: true,
})
id?: string;
@property({
type: 'string',
required: true,
})
name: string;
@hasMany(() => Order)
orders: Order[];
constructor(data?: Partial<Customer>) {
super(data);
}
}
export interface CustomerRelations {
// describe navigational properties here
}
export type CustomerWithRelations = Customer & CustomerRelations;
Модел на поръчката
import {Entity, model, property, belongsTo} from '@loopback/repository';
import {Customer} from './customer.model';
@model()
export class Order extends Entity {
@property({
type: 'string',
id: true,
generated: true,
})
id?: string;
@property({
type: 'string',
required: true,
})
name: string;
@belongsTo(() => Customer)
customerId: string;
constructor(data?: Partial<Order>) {
super(data);
}
}
export interface OrderRelations {
// describe navigational properties here
}
export type OrderWithRelations = Order & OrderRelations;
Клиентско хранилище
import {Getter, inject} from '@loopback/core';
import {DefaultCrudRepository, HasManyRepositoryFactory, repository} from '@loopback/repository';
import {MongoDataSource} from '../datasources/mongo.datasource';
import {Customer, CustomerRelations} from '../models/customer.model';
import {Order} from '../models/order.model';
import {OrderRepository} from './order.repository';
export class CustomerRepository extends DefaultCrudRepository<
Customer,
typeof Customer.prototype.id,
CustomerRelations
> {
public readonly orders: HasManyRepositoryFactory<Order, typeof Customer.prototype.id>;
constructor(
@inject('datasources.mongo') dataSource: MongoDataSource, @repository.getter('OrderRepository') protected orderRepositoryGetter: Getter<OrderRepository>,
) {
super(Customer, dataSource);
this.orders = this.createHasManyRepositoryFactoryFor('orders', orderRepositoryGetter,);
this.registerInclusionResolver('orders', this.orders.inclusionResolver);
}
}
Хранилище за поръчки
import {Getter, inject} from '@loopback/core';
import {BelongsToAccessor, DefaultCrudRepository, repository} from '@loopback/repository';
import {MongoDataSource} from '../datasources/mongo.datasource';
import {Customer} from '../models/customer.model';
import {Order, OrderRelations} from '../models/order.model';
import {CustomerRepository} from './customer.repository';
export class OrderRepository extends DefaultCrudRepository<
Order,
typeof Order.prototype.id,
OrderRelations
> {
public readonly customer: BelongsToAccessor<Customer, typeof Order.prototype.id>;
constructor(
@inject('datasources.mongo') dataSource: MongoDataSource, @repository.getter('CustomerRepository') protected customerRepositoryGetter: Getter<CustomerRepository>,
) {
super(Order, dataSource);
this.customer = this.createBelongsToAccessorFor('customer', customerRepositoryGetter,);
this.registerInclusionResolver('customer', this.customer.inclusionResolver);
}
}
Отговор
[
{
"id": "5eeda8af3e951001e81af9e3",
"name": "sam"
},
{
"id": "5eedbd790230752568fa5921",
"name": "joel"
}
]