Trier mes saisons par ordre chronologique via une table OneToMany via Doctrine / Symfony

a marqué ce sujet comme résolu.

Bonjour :)

En ce moment je m’exerce sur un projet pour apprendre Symfony 5, mais là je bloque sur un point, car Symfony c’est difficile :P

J’ai deux tables SQL : Program & Seasons, je récupére les séries via la table Program et j’affiche les saisons dans l’ordre des IDs; mais je souhaite afficher les saisons dans l’ordre croissant (1, 2, 3, etc.).

Le champ que je souhaite trié se trouve dans Seasons > Number.

Mon code simplifié :

src/Entity/Program.php

/**
 * @ORM\OneToMany(targetEntity=Season::class, mappedBy="program")
*/
private $seasons;

src/Controller/ProgramController.php

/**
 * @Route("/{slug}", name="show")( 
 * @ParamConverter("program", class="App\Entity\Program", options={"mapping": {"slug": "slug"}})
*/
public function show(Program $program):Response
{
    // Je récupérer les saisons et les affiche dans mon twig
    $seasons = $program->getSeasons();

    return $this->render('program/show.html.twig', [
        'program' => $program,
        'seasons' => $seasons,
    ]);
}

src/Entity/Program.php

/**
 * @return Collection|Season[]
*/
public function getSeasons(): Collection
{
    return $this->seasons;
}

Donc j’ai pensé à faire une requête personnalisée dans le repository de Season :

src/Repository/SeasonRepository.php

public function orderByNumber()
{
    return $this->createQueryBuilder('s')
    ->orderBy('s.number', 'ASC')
    ->getQuery()
    ->getResult()
;

Mais ça ne fonctionne pas et je ne sais pas trop comment faire; si quelqu’un peut me renseigner :)

+0 -0

Salut

Normalement tu peux utiliser l’attribut orderBy sur des *ToMany pour définir un champ sur lequel ordonner dans les collections. Par contre, tu ne peux pas spécifier de champ qui ne soit pas directement sur l’entité liée.

De ce que je comprends, dans l’annotation de la relation entre Program et Season (dans ce sens) pourrait se voir ajouter orderBy="number".

+2 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte