J'utilise TypeORM avec le fichier de configuration en jachère: ormconfig.json
{
"type": "mysql",
"Host": "localhost",
"port": 3306,
"username": "root",
"password": "my-secret-pw",
"database": "mytestdb",
}
Mes fichiers d'entités sont stockés dans le répertoire ./src/bar/entity. J'obtiens toujours l'erreur suivante:
RepositoryNotFoundError: Aucun référentiel pour "myTable" n'a été trouvé. On dirait que cette entité n'est pas enregistrée dans la connexion "par défaut" actuelle?
L'entité est trouvée lorsque j'ajoute manuellement le répertoire au fichier de configuration:
{
...
"entities": ["src/bar/entity/**/*.ts"]
}
Mon entité est définie comme:
@Entity('myTable')
export default class MyTable {
@PrimaryGeneratedColumn()
public id: number;
...
Comment puis-je permettre à TypeORM de trouver ces entités sans les définir manuellement dans le fichier de configuration de chaque répertoire?
Le cas le plus courant que vous avez décrit est d'avoir un répertoire entities
séparé qui se compose uniquement de déclarations d'entité.
{
...
"entities": ["src/bar/entities/**/*.ts"]
}
Une autre approche consisterait à importer chaque entité séparément:
import {User} from "./payment/entity/User";
import {Post} from "./blog/entity/Post";
{
...
"entities": [User, Post]
}
Pour moi, la réponse était { ... entities: [join(__dirname, '/../**/**.entity{.ts,.js}')], }
J'ai trouvé l'exemple ici https://github.com/nestjs/nest/blob/master/sample/05-sql-typeorm/src/app.module.ts
Si vous ne souhaitez pas placer toutes les entités au même endroit (c'est-à-dire si vous avez des dossiers de modules et souhaitez placer des entités dans leurs dossiers de modules associés), et si vous utilisez une convention de dénomination de fichier comme foo.entity.ts
, foo.service.ts
, etc. alors vous pouvez faire ce qui suit et il trouvera toutes les entités où qu'elles se trouvent dans votre arbre source:
{
...
"entities": ["src/**/*{.entity.ts}"],
}
Pour moi, cela a aidé à inclure également le répertoire src
dans ormconfig.json
:
"entities": [
"dist/**/*.entity{.ts,.js}",
"src/**/*.entity{.ts,.js}"
],
Afin de travailler à la fois pour le développement et l'environnement de production, j'ai dû faire comme ceci:
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';
}