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 :
- Les objets partiels reposent désormais sur les objets paresseux natifs de PHP (#12210), au lieu de l'implémentation historique de Doctrine.
- L'unité de travail ordonne ses
UPDATEpour éviter les interblocages sur verrou partagé (#12489) — le genre de bug qui ne se reproduit qu'en production.
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 :
JoinColumnsest déprécié (#12564)TypedExpressioncède la place àExpressionWithReturnType(#12543)LockMode::NONEdevient un no-op (#12548)PaginatorInterface::HINT_ENABLE_DISTINCTest introduit,OffsetPaginatorprenant le relais dans les tests (#12591)
À 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