web-dev-qa-db-ja.com

エンティティディレクトリが構成ファイルで設定されていない場合、TypeORMはエンティティを見つけることができません

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が各ディレクトリの構成ファイルに手動で設定せずにこれらのエンティティを検索できるようにするにはどうすればよいですか?

10
Daniel Santos

あなたが説明した最も一般的なケースは、エンティティ宣言のみで構成される別個のentitiesディレクトリを持つことです。

{
...
"entities": ["src/bar/entities/**/*.ts"]
}

別のアプローチは、各エンティティを個別にインポートすることです:

import {User} from "./payment/entity/User";
import {Post} from "./blog/entity/Post";

{
...
"entities": [User, Post]
}
17
Risto Novik

私にとっての答えは{ ... entities: [join(__dirname, '/../**/**.entity{.ts,.js}')], }でした

私はここで例を見つけました https://github.com/nestjs/nest/blob/master/sample/05-sql-typeorm/src/app.module.ts

4
Victor

すべてのエンティティを同じ場所に配置したくない場合(つまり、モジュールフォルダがあり、関連するモジュールフォルダにエンティティを配置する場合)、およびfoo.entity.tsなどのファイル命名規則を使用している場合、foo.service.tsなどの場合は、次の操作を行うことができ、ソースツリー内のすべてのエンティティが見つかります。

{
  ...
  "entities": ["src/**/*{.entity.ts}"],
}
2
ryan0

私にとっては、srcディレクトリもormconfig.jsonに含めるのに役立ちました:

  "entities": [
    "dist/**/*.entity{.ts,.js}",
    "src/**/*.entity{.ts,.js}"
  ],
2

開発環境と本番環境の両方で機能するためには、次のようにする必要がありました。

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';
}
0
renatogbp