Use manual hydration for many-to-many to avoid problems with caching

This commit is contained in:
2025-06-05 15:32:51 +02:00
parent 660de08377
commit 7ab75a30fb
3 changed files with 66 additions and 44 deletions

View File

@@ -22,25 +22,35 @@ class BibliographyRepository extends ServiceEntityRepository
*/
public function findAllBySite(int $siteId): array
{
$rsm = new ResultSetMappingBuilder($this->getEntityManager());
$rsm->addRootEntityFromClassMetadata('App\Entity\Bibliography', 'b');
$query = $this->getEntityManager()->createNativeQuery(
'SELECT
id,
citazione,
riferimento,
pagine
$conn = $this->getEntityManager()->getConnection();
$sql = '
SELECT
b.id,
b.citazione,
b.riferimento,
bs.pagine
FROM bibliografia b
JOIN bibliografia_sito
ON id_bibliografia = b.id
WHERE id_sito = :id
ORDER BY ordine ASC',
$rsm
);
INNER JOIN bibliografia_sito bs ON bs.id_bibliografia = b.id
WHERE bs.id_sito = :siteId
ORDER BY bs.ordine ASC
';
$query->setParameter('id', $siteId);
$stmt = $conn->prepare($sql);
$results = $stmt->executeQuery(['siteId' => $siteId])->fetchAllAssociative();
return $query->getResult();
$entities = [];
foreach ($results as $row) {
$biblio = new Bibliography();
$biblio->setId($row['id']);
$biblio->setCitation($row['citazione']);
$biblio->setReference($row['riferimento']);
$biblio->setPages($row['pagine']);
$entities[] = $biblio;
}
return $entities;
}
/**
* @return Bibliography[]