假设有两个数据库,其中date数据库的表每天一张,表名根据日期创建:20230801,20230802...
要根据请求的接口参数日期范围,动态去连接表查询该如何操作呢?
imports: [
TypeOrmModule.forRoot({
name: 'db1Connection', // 指定连接名称
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: '123456',
database: 'date',
entities: [Date],
autoLoadEntities:true, // 自动加载实体
synchronize: true,
}),
TypeOrmModule.forRoot({
name: 'db2Connection', // 指定连接名称
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: '123456',
database: 'test',
entities: [Goods],
autoLoadEntities:true, // 自动加载实体
synchronize: true,
}),
TypeOrmModule.forFeature([Date], 'db1Connection'),
TypeOrmModule.forFeature([Goods], 'db2Connection')
],
实体指定表名查询是OK的。
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity('good')
export class Goods {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 128 })
name: string;
@Column()
desc: string;
@Column()
price: number;
@Column()
sum: number;
}
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Date {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 128 })
title: string;
@Column()
content: string;
@Column()
userId: number;
}
上面的实体没有指定表名,每次查询自动创建了一个 date 表 。。
目前数据库有如下表:
20230801
20230802
20230803
我想的是根据查询的参数去动态查询这些表,可能是一张也可能是多张表
import { Injectable, Inject } from '@nestjs/common';
import { Repository, EntityManager } from 'typeorm';
import { InjectRepository, InjectEntityManager, } from '@nestjs/typeorm';
import { Date } from 'src/entitys/date.entity';
import { Goods } from 'src/entitys/goods.entity';
@Injectable()
export class DateService {
constructor(
@InjectRepository(Date, 'db1Connection') private dateRepository: Repository<Date>,
@InjectRepository(Goods, 'db2Connection') private goodsRepository: Repository<Goods>,
) {}
async findByDate() {
}
async findAll() {
}
async findGoods() {
return this.goodsRepository.find();
}
}
用注解定义实体,是程序加载的时候就定义了,@Entity() 不传参数相当于用class 名作为表名。
实体可以分离定义:
然后再使用:
参考:typeorm