Bonjour,
Je pense que vous avez tous travaillé un jour avec des tables versionnées.
Par exemple, on a plusieurs version d'un objet, et l'on affiche toujours la dernière version.
En général, cet objet a le format suivant :
1 2 3 4 5
|
Objet 1:
id
valeur
version |
Si maintenant on a une table 2 qui a une relation OneToMany sur cette table 1. On a objet2->getObjets1() qui nous donne la liste de toutes les versions.
Une facon de récupérer le dernier élement est de faire comme suit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
class Student
{
// ...
/**
* @OneToMany(targetEntity="Transfer" mappedBy="student")
* @OrderBy({"date" = "ASC"})
*/
private $transfers;
// ...
} |
puis :
$student -> getTransfers() -> last();
La ou ca pose un problème, c'est si on a 2 millions de version de cet élément... on va devoir les charger toutes en mémoire pour récupérer uniquement le dernier.
Ma question :
Est-il possible de ne charger qu'un seul élément, mais de quand même garder le lien avec l'entité.
Par exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
class Student
{
// ...
/**
* @OneToMany(targetEntity="Transfer" mappedBy="student")
* @OrderBy({"date" = "ASC"})
* @Limit(1)
*/
private $transfer;
// ...
} |
puis un simple
1 2
|
$student -> getTransfer() |
Ca nous aiderait vraiment a limiter les sous requêtes et la duplication de code un peu partout pour bien spécifier qu'on veut le dernier élément, ainsi qu'une utilisation mémoire bien plus maitrisée.
Avez-vous une idée de la faisabilité de ce système ?
Merci,
Pierre
Partager