TypeORM
TypeORM fournit un ensemble de méthodes standardisées pour gérer les opérations CRUD.
La documentation officielle :
- Repository API : https://typeorm.io/docs/working-with-entity-manager/repository-api/
- Working with Repository (NestJs) : https://docs.nestjs.com/techniques/database
Les méthodes principales
Lecture
find()→ retourne une liste d’entitésfindOneBy(criteria)→ retourne une entité selon un critère
Création
create(data)→ crée une instance sans sauvegarder en basesave(entity)→ sauvegarde en base (insert ou update)
Mise à jour
update(criteria, partialEntity)→ met à jour sans charger l’entité complète
Suppression
remove(entity)→ supprime une entité existantedelete(criteria)→ supprime directement via un critère
La différence entre create() et save()
repository.create()
- Instancie une entité à partir d’un objet.
- Ne persiste pas en base de données.
- Utile pour préparer les données avant validation ou modification.
repository.save()
- Persiste l’entité en base de données.
- Effectue un
INSERTsi l’entité n’existe pas (pas d’id). - Effectue un
UPDATEsi elle existe déjà (id existant). - Retourne l’entité sauvegardée.
Mise à jour partielle : update() vs findOne() + Object.assign() + save()
update(criteria, partialEntity)
await repository.update(id, { name: "sara" });Exécute un UPDATE SQL direct:
- Ne charge pas l’entité complète avant modification
- N’exécute pas les hooks (
@BeforeUpdate, etc.) - Ne retourne pas automatiquement l’entité mise à jour
Utile pour une mise à jour simple et rapide.
- avec
Object.assign()+save()
const user = await repository.findOneBy({ id });
Object.assign(user, updateAttr);
await repository.save(user);Lorsqu’on fait une mise à jour partielle (PATCH), le client envoie seulement les champs à modifier :
{
"name": "sara"
}On ne veut pas écraser les autres propriétés.
Object.assign(target, source) copie uniquement les propriétés présentes dans le DTO, modifie l’objet existant en mémoire
et permet une mise à jour partielle propre.