我在 Loopback 4 中的何处执行本机 SQL 查询?
Where do I execute native SQL queries in Loopback 4?
我是 Loopback 4 的新手,我一直在尝试执行本机 SQL 查询。我找到了如何去做,问题是没有任何线索可以将它放在我的代码中以使其工作......这是我找到的documentation。
我需要知道我应该把它放在哪里:
const result = await repository.execute('SELECT * FROM Products');
在我的 Loopback 项目中,它有很多文件。我的目标是创建一个像 /products/[name]
这样的 REST 端点,其中 [name]
作为动态插入到 SQL 查询的参数。
就我个人而言,我会将其实现为一个新的 Repository 方法。
假设您的模型名为 Product
,那么您的项目中应该已经存在 src/repositories/product.repository.ts
文件导出 ProductRepository
class。 (您可以 运行 lb4 repository
创建它。)
export class Product extends DefaultCrudRepository<
Product,
typeof Product,
Product Relations
> {
constructor(@inject('datasources.db') dataSource: DbDataSource) {
super(Product, dataSource);
}
// your custom method
async selectByName(name: string): Promise<Product[]> {
const rawItems = await repository.execute('SELECT * FROM Products');
// would you like to convert raw data into Product instances?
return rawItems.map(it => new Product(it));
}
}
然后您可以从您的控制器调用这个新的自定义存储库方法,就像您调用例如repository.find(filter)
.
您可以根据环回文档 https://loopback.io/doc/en/lb4/Controller.html 在您的控制器 class 中执行此操作。正如您将在控制器本身中定义 REST 端点一样,您也可以使用 repository.execute() 例如
在此处进行插入
@get('/products/{name}')
async doSomething(
@param.path.string('name') name: string,
): Promise<Product> {
const sql = `SELECT * FROM some_table WHERE some_field="${name}"`;
await this.productRepository.execute(sql)
--- other lines of code & return value --
}
我是 Loopback 4 的新手,我一直在尝试执行本机 SQL 查询。我找到了如何去做,问题是没有任何线索可以将它放在我的代码中以使其工作......这是我找到的documentation。
我需要知道我应该把它放在哪里:
const result = await repository.execute('SELECT * FROM Products');
在我的 Loopback 项目中,它有很多文件。我的目标是创建一个像 /products/[name]
这样的 REST 端点,其中 [name]
作为动态插入到 SQL 查询的参数。
就我个人而言,我会将其实现为一个新的 Repository 方法。
假设您的模型名为 Product
,那么您的项目中应该已经存在 src/repositories/product.repository.ts
文件导出 ProductRepository
class。 (您可以 运行 lb4 repository
创建它。)
export class Product extends DefaultCrudRepository<
Product,
typeof Product,
Product Relations
> {
constructor(@inject('datasources.db') dataSource: DbDataSource) {
super(Product, dataSource);
}
// your custom method
async selectByName(name: string): Promise<Product[]> {
const rawItems = await repository.execute('SELECT * FROM Products');
// would you like to convert raw data into Product instances?
return rawItems.map(it => new Product(it));
}
}
然后您可以从您的控制器调用这个新的自定义存储库方法,就像您调用例如repository.find(filter)
.
您可以根据环回文档 https://loopback.io/doc/en/lb4/Controller.html 在您的控制器 class 中执行此操作。正如您将在控制器本身中定义 REST 端点一样,您也可以使用 repository.execute() 例如
在此处进行插入 @get('/products/{name}')
async doSomething(
@param.path.string('name') name: string,
): Promise<Product> {
const sql = `SELECT * FROM some_table WHERE some_field="${name}"`;
await this.productRepository.execute(sql)
--- other lines of code & return value --
}