veilletech.fr
8 sept. Feed du jour
#05 PHP Article

Doctrine 3.7 : la pagination par curseur

Une dépréciation qu'on ne lit pas devient une migration majeure qu'on subit.

Doctrine ORM 3.7.0 intègre la pagination par curseur en standard : CursorPaginator navigue par valeur de tri plutôt que par décalage, et l'ancien comportement devient explicite sous OffsetPaginator. La version bascule aussi les objets partiels sur les lazy objects natifs de PHP et ordonne les UPDATE de l'unité de travail pour éviter les deadlocks sur ShareLock. Cinq dépréciations accompagnent la montée, dont JoinColumns et TypedExpression.

2 min de lectureintermédiairevidéo 1:20
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Pourquoi ça compte
  3. Ce qui change ailleurs
  4. Les dépréciations à lire
  5. À retenir

Ce qui se passe

Doctrine ORM 3.7.0 est sortie le 7 septembre 2026 : version mineure, 3 tickets et 35 pull requests, 13 contributeurs.

La nouveauté principale est la pagination par curseur, en standard. Le nouveau CursorPaginator navigue par valeur de tri plutôt que par OFFSET, avec une API de page immuable, et l'ancien comportement devient explicite sous le nom OffsetPaginator.

Deux correctifs sont arrivés avant même la sortie et méritent l'attention : la construction du curseur était fausse quand le tri portait sur une association ManyToOne (#12485), et l'ensemble a été durci « contre des préoccupations de sécurité » (#12479) — un curseur venu du client reste une entrée non fiable.

Pourquoi ça compte

OFFSET a deux défauts connus de tous et corrigés par presque personne. La base doit lire puis jeter toutes les lignes qui précèdent, ce qui dégrade la requête à mesure qu'on avance dans les pages. Et une insertion pendant la navigation décale les résultats : le lecteur voit deux fois la même ligne, ou en saute une.

Un curseur ancré sur la valeur de tri supprime les deux. Le prix est connu : plus de saut direct à la page 47, et un tri qui doit être total.

Ce qui change ailleurs

Deux modifications passent moins bien la rampe des notes de version mais touchent tout le monde :

S'ajoutent deux commodités attendues : pouvoir nommer ses clés étrangères (#12565) et fixer la longueur par défaut des chaînes dans le SchemaTool (#12563), plutôt que de la répéter sur chaque propriété.

Les dépréciations à lire

C'est la partie à ne pas remettre à plus tard, parce qu'elle prépare la 4.0 :

À retenir

Montée compatible, mais lancez votre analyse statique juste après : c'est elle qui fera remonter les quatre dépréciations, pas la suite de tests. Et si vous paginez un flux, une file ou un journal, CursorPaginator est la raison de faire cette mise à jour maintenant plutôt qu'au prochain trimestre.

Source : Doctrine ORM 3.7.0