Jointure et affichage

Ce sujet est résolu
174921
,

Bonjour, j'espére ne pas mettre trompé de topic ^^
Je souhaite afficher les catégories de mes articles mais je n'arrive pas à le faire.

Actuellement j'ai deux table relié entre elle via Doctrine (le CRUD est en place pour les deux et tout est nickel, ma table article chope bien les catégories disponible).

Maintenant j'aimerais afficher ma catégorie lorsque j'ouvre un article, du coup j'ai fait :
Dans mon repository ->

public function getOneValid ($id)
    {
        return $this->createQueryBuilder('b')
            ->join('b.id_categorie', 'c')->addSelect('c')
            ->where('b.status = :val')
            ->andWhere('b.id = :id')
            ->setParameter('val', true)
            ->setParameter('id', $id)
            ->orderBy('b.id', 'DESC')
            ->getQuery()
            ->getResult();

    }

Dans mon controler (deja ici j'obtien un tableau (via $result) c'est pas tip top) ->

public function unique (BlogContent $entity, string $slug) :Response
    {
        if ($entity->getSlug() !== $slug) {
            return $this->redirectToRoute('blog.unique', [
               'id' => $entity->getId(),
               'slug' => $entity->getSlug()
            ], 301);
        }

        $result = $this->blogcontent->getOneValid($entity->getId());
        var_dump($result);

        return $this->render('blog/unique.html.twig', [
            'result' => $result[0]
        ]);
    }

A partir d'ici le var_dump me renvoie un tableau :

Array (size=1)
  0 => 
    object(App\Entity\BlogContent)[255]
      private 'id' => int 1
      private 'status' => boolean true
      private 'created_at' => 
        object(DateTime)[252]
          public 'date' => string '2019-02-13 16:50:39.000000' (length=26)
          public 'timezone_type' => int 3
          public 'timezone' => string 'UTC' (length=3)
      private 'title' => string 'Utilisation de DBMS_CRYPTO.HASH' (length=31)
      private 'content' => string '<p>DBMS_...' (length=1232)
      private 'author' => string 'Hadock' (length=6)
      private 'id_categorie' => 
        object(Proxies\__CG__\App\Entity\BlogCategories)[544]
          public '__initializer__' => 
            object(Closure)[536]
              ...
          public '__cloner__' => 
            object(Closure)[534]
              ...
          public '__isInitialized__' => boolean true
          private 'id' (App\Entity\BlogCategories) => int 5
          private 'name' (App\Entity\BlogCategories) => string 'Oracle' (length=6)
          private 'img' (App\Entity\BlogCategories) => string 'oracle.png' (length=10)
          private 'blogContent_ids' (App\Entity\BlogCategories) => 
            object(Doctrine\ORM\PersistentCollection)[661]
              ...

Donc j'ai bien "name" qui est à "Oracle" mais je comprend comment l'avoir du côter de ma vue avec twig.
Et si vous avez un tips pour méviter de récupérer un tableau je suis preneur! (Il ne serait pas question de Hydration modes parfois?)

Merci d'avance pour toute info's ou piste :)

2 Réponse

5467
,

Bonjour,
Si tu n'as qu'un seul résultat dans ta requête tu peux utiliser :

->getQuery()
->getOneOrNullResult();

et pour l'afficher dans twig:

{{ result.id_categorie.name }}
174921
,

Merci pour le ->getOneOrNullResult(); j'y avais pas pensé. ^^
Par contre le {{ result.id_categorie.name }} je l'avais deja testé et il me retourne toujours une erreur.
Et pendant que j'écris je test il fallait mettre {{ result.idcategorie.name }} pour que ma méthode soit bien call, il me semblait l'avoir dejà testé pourtant....

public function getIdCategorie(): ?BlogCategories
    {
        return $this->id_categorie;
    }

Merci en tout cas!