Symfony6 Techwall #31 Doctrine Repository findBy nav de paginatin automatique

Merci à Cyril T. pour sa contribution le 30/12/2021

Tech Wall
Francais Francais
Symfony
Symfony6 Techwall #31 Doctrine Repository findBy nav de paginatin automatique

findBy()
Rôle : retourne l’ensemble des entités qui correspondent à l’entité associé au repositorie comme findAll sauf qu’elle permet d’effectuer un filtrage sur un ensemble de critère passés dans un Array. Elle offre la possibilité de trier les entités sélectionnées et facilite la pagination en offrant un nombre de valuer de retour.
Synatxe:
$repository-findBy( array $criteria, array $orderBy = null, $limit = null, $offset = null);
Exemple :
$listeEtudiants = $repository-findBy(array('section' = 'RT4','nom' = 'Mohamed'),
array('date' = 'desc'),10, 0);

ORM : Object Relation Mapper
Couche d’abstraction
Gérer la persistance des données
Mapper les tables de la base de données relationnelle avec des objets
Crée l'illusion d'une base de données orientée objet à partir d'une base de données relationnelle en définissant des correspondances entre cette base de données et les objets du langage utilisé.
Propose des méthodes prédéfinies
Doctrine utilise deux design pattern objet :
Data Mapper
Unit of Work
C’est la couche entre les objets (entités) et les tables de la base de données.
Dans le cas de PHP elle synchronise les données stockées en base de données avec vos objets PHP.
Elle se charge d’insérer et de mettre à jour les données de la base en se basant sur le contenu des propriété de votre objet.
Elle peut aussi supprimer des enregistrement de la base de données.
Elle peut aussi hydrater vos objets en utilisant les informations contenues dans la base de données.
Ceci permet d’avoir une abstraction complète de la base de données vu que les objets sont indépendants du système de stockage. C’est le Data Mapper qui se charge de ca.

Doctrine implémente ce design pattern via l’objet EntityManager.

Afin d’éviter une multitude de petite requêtes envoyé à votre base de données, et de garder un historique des requetés effectuées au niveau de votre base de données, Doctrine utilise le design pattern Unit of work.
Pour une raison de performance et d'intégrité, La synchronisation effectuée par l'Entity Manager ne se fait pas pour chaque changement avec la base de données.
Le design pattern Unit of Work permet de gérer l'état des différents objets hydratés par l'Entity Manager.
Une transaction est ouverte regroupant l’ensemble des opérations. Le commit de cette transaction déclenchera l’exécution de l’ensemble de ses requêtes.
En cas d’échec l’ensemble des requêtes et annulées.