TypeORMを次の構成ファイルと共に使用しています:ormconfig.json
{
"type": "mysql",
"Host": "localhost",
"port": 3306,
"username": "root",
"password": "my-secret-pw",
"database": "mytestdb",
}
私のエンティティファイルは./src/bar/entityディレクトリに保存されます。私は常に次のエラーを受け取ります:
RepositoryNotFoundError:「myTable」のリポジトリが見つかりませんでした。このエンティティは現在の「デフォルト」接続に登録されていないようですか?
構成ファイルにディレクトリを手動で追加すると、エンティティが見つかります。
{
...
"entities": ["src/bar/entity/**/*.ts"]
}
私のエンティティは次のように定義されています:
@Entity('myTable')
export default class MyTable {
@PrimaryGeneratedColumn()
public id: number;
...
TypeORMが各ディレクトリの構成ファイルに手動で設定せずにこれらのエンティティを検索できるようにするにはどうすればよいですか?
あなたが説明した最も一般的なケースは、エンティティ宣言のみで構成される別個のentities
ディレクトリを持つことです。
{
...
"entities": ["src/bar/entities/**/*.ts"]
}
別のアプローチは、各エンティティを個別にインポートすることです:
import {User} from "./payment/entity/User";
import {Post} from "./blog/entity/Post";
{
...
"entities": [User, Post]
}
私にとっての答えは{ ... entities: [join(__dirname, '/../**/**.entity{.ts,.js}')], }
でした
私はここで例を見つけました https://github.com/nestjs/nest/blob/master/sample/05-sql-typeorm/src/app.module.ts
すべてのエンティティを同じ場所に配置したくない場合(つまり、モジュールフォルダがあり、関連するモジュールフォルダにエンティティを配置する場合)、およびfoo.entity.ts
などのファイル命名規則を使用している場合、foo.service.ts
などの場合は、次の操作を行うことができ、ソースツリー内のすべてのエンティティが見つかります。
{
...
"entities": ["src/**/*{.entity.ts}"],
}
私にとっては、src
ディレクトリもormconfig.json
に含めるのに役立ちました:
"entities": [
"dist/**/*.entity{.ts,.js}",
"src/**/*.entity{.ts,.js}"
],
開発環境と本番環境の両方で機能するためには、次のようにする必要がありました。
entities: [
this.isProduction() ?
path.join(__dirname, '../**/**.entity{.ts,.js}') : '**/*.entity{.ts,.js}',
],
// ....
private isProduction(): boolean {
const mode = this.configService.get('NODE_ENV');
return mode !== 'development';
}