在回送4中对数据库执行查询

问题描述

我试图在回送4中使用以下提到的代码数据库执行查询,但是会引发错误
类型“ MetadataLettersRepository”的类型上不存在“执行”属性 请帮忙。

相关代码在这里

存储库定义:

import {DefaultCrudRepository} from '@loopback/repository';
import {MetadataLetters,MetadataLettersRelations} from '../models';
import {RossmasDataSource} from '../datasources';
import {inject} from '@loopback/core';

export class MetadataLettersRepository extends DefaultCrudRepository<
  MetadataLetters,typeof MetadataLetters.prototype.id,MetadataLettersRelations
> {
  constructor(
    @inject('datasources.rossmas') dataSource: RossmasDataSource,) {
    super(MetadataLetters,dataSource);
  }
}

控制器代码

import {get} from '@loopback/rest';
import {MetadataLettersRepository} from '../repositories';


export class HelloController {
  
  @get('/searchByMetadata')
  async searchByMetadata(): Promise<any> {
    const result = await MetadataLettersRepository.execute(
      'SELECT * FROM Metadata_letters'
    );
    console.log('Query run successfully...!!!')
    return (result)
  }
}


解决方法

您正尝试直接使用类,这在JavaScript或TypeScript中是不可能的。您将需要已由LoopBack 4初始化的类(对象)的实例。

在控制器中,应该有一个用于依赖项注入的构造函数:

// This may be different depending on how the controller was created.
// But the structure is more-or-less the same.

constructor(
  @repository(MetadataLettersRepository)
  protected repository: MetadataLettersRepository,) {}

这告诉LoopBack 4将MetadataLettersRepository的实例提供到repository变量中。

从那里可以使用repository.execute()

// Notice the use of the `repository` variable.

const result = await repository.execute(
  'SELECT * FROM metadata_letters'
);

进一步阅读