【问题标题】:Can't obtain hasMany relation object in loopback 4?无法在环回 4 中获取 hasMany 关系对象?
【发布时间】:2021-03-19 04:21:51
【问题描述】:

我一直在尝试使用包含恢复数据查询,我的第一个模型是“块”,它与称为“站点”的命运模型具有“hasMany”关系。好吧,通常这会按预期工作,但这次它有一个问题,数据使用 ObjectID() 存储在 mongodb 中,所以如果我尝试在 robo3t 或其他任何地方查询它,我必须将 ObjectId 和 ID 本身放在文件。

我在 loopback 4 文档中发现,如果我要保存或关联使用 objectId 存储的数据,我必须设置属性 dataType:ObjectId,但仍然无法正常工作。

我的积木模型:

import {Entity, model, property, hasMany} from '@loopback/repository';
import {Site} from './site.model';

@model({
  settings: {
    strict: false,
    mongodb: {
      collection: 'bloques',
    },
  },
})
export class Block extends Entity {
  @property({
    type: 'string',
    id: true,
    defaultFn: 'uuidv4',
    mongodb: {dataType: 'ObjectId'},
  })
  id: string;

  @property({
    type: 'date',
    required: true,
  })
  dateBlock: string;

  @property({
    type: 'object',
    required: true,
  })
  statuses: object;

  @hasMany(() => Site)
  minedIds: Site[];
  /* @hasMany(() => Site)
  minedIds: Site[];*/

  [prop: string]: any;

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

export interface BlockRelations {
  // describe navigational properties here
}

export type BlockWithRelations = Block & BlockRelations;

我的站点模型:

import {Entity, hasMany, model, property} from '@loopback/repository';
import {CachimbaModel} from './cachimba-model.model';

@model({
  settings: {
    // model definition goes in here
    mongodb: {collection: 'minadas'},
  },
})
export class Site extends Entity {
  @property({
    type: 'string',
    id: true,
    generated: true,
    mongodb: {dataType: 'ObjectId'},
  })
  id?: string;

  @property({
    type: 'date',
    required: true,
  })
  lastUpdate: string;

  @property({
    type: 'string',
    required: true,
  })
  name: string;

  @property({
    type: 'string',
    required: true,
  })
  logo: string;

  @hasMany(() => CachimbaModel)
  data: CachimbaModel[];

  @property({
    type: 'string',
    dataType: 'ObjectId',
  })
  blockId?: string;

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

export interface SiteRelations {
  // describe navigational properties here
}

export type SiteWithRelations = Site & SiteRelations;

它们各自的repos如下: 区块回购

import {Getter, inject} from '@loopback/core';
import {DefaultCrudRepository, repository, HasManyRepositoryFactory} from '@loopback/repository';
import {DbDataSource} from '../datasources';
import {Block, BlockRelations, Site} from '../models';
import {SiteRepository} from './site.repository';

export class BlockRepository extends DefaultCrudRepository<
  Block,
  typeof Block.prototype.id,
  BlockRelations
> {

  public readonly minedIds: HasManyRepositoryFactory<Site, typeof Block.prototype.id>;

  constructor(
    @inject('datasources.DbDataSource') dataSource: DbDataSource,
    @repository.getter('SiteRepository')
    protected siteRepositoryGetter: Getter<SiteRepository>,
  ) {
    super(Block, dataSource);
    this.minedIds = this.createHasManyRepositoryFactoryFor('minedIds', siteRepositoryGetter,);
    this.registerInclusionResolver('minedIds', this.minedIds.inclusionResolver);
  }
}

网站回购

import {Getter, inject} from '@loopback/core';
import {
  DefaultCrudRepository,
  HasManyRepositoryFactory,
  repository,
} from '@loopback/repository';
import {DbDataSource} from '../datasources';
import {CachimbaModel, Site, SiteRelations} from '../models';
import {CachimbaModelRepository} from './cachimba-model.repository';

export class SiteRepository extends DefaultCrudRepository<
  Site,
  typeof Site.prototype.id,
  SiteRelations
> {
  public readonly data: HasManyRepositoryFactory<
    CachimbaModel,
    typeof Site.prototype.id
  >;

  constructor(
    @inject('datasources.DbDataSource') dataSource: DbDataSource,
    @repository.getter('CachimbaModelRepository')
    protected cachimbaModelRepositoryGetter: Getter<CachimbaModelRepository>,
  ) {
    super(Site, dataSource);
    this.data = this.createHasManyRepositoryFactoryFor(
      'data',
      cachimbaModelRepositoryGetter,
    );
    this.registerInclusionResolver('data', this.data.inclusionResolver);
  }
}

我尝试使用以下包含从块控制器查询和获取嵌套数据:

我的数据库具有以下值:

我会真诚地为您提供帮助!提前致谢!

【问题讨论】:

    标签: javascript node.js mongodb loopback loopback4


    【解决方案1】:

    我的错,我不必在 minedIds 属性上设置 id,我必须在与 hasMany 相对的目标模型属性上设置它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2020-04-05
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 2023-03-31
      • 2017-12-19
      相关资源
      最近更新 更多