Bonjour,

je recupère les données d'un "participant" qui a une relation OneToMany avec "coursses" avec la requet suivante.

ici mon ParticipantRepository.php qui me permet d'extrait les données de ma BD

    /**
     * Récupère les participants en lien avec la recherche
     * @return Participant[]
     */
    public function findSearch2(ParticipantSearchData $search): array
    {
        $query = $this->createQueryBuilder('p')
            ->select('p', 'c')
            ->join('p.courses', 'c');

        if (!empty($search->p)) {
            $query = $query
            ->andWhere('p.id = :p')
            ->orderBy('c.id', 'DESC')
            ->setMaxResults(1)
            ->setParameter('p', $search->p);
        }

        return $query->getQuery()->getResult();
    }

ici mon controller

if (!empty($participantsSearchForm->isSubmitted())) {

            $participantSearch = $participantsRepo->findSearch2($data);

        } else {

            $participantSearch = null ;

        }
        dump($participantSearch);

        return $this->render('participant/index.html.twig', [
            'participantSearchForm' => $participantSearchForm->createView(),
            'participantForm' => $participantForm->createView(),
            'participantsSearch' => $participantSearch,
            'editMode' => $participants->getId() !== null
        ]);
    }

ici les infos de mon dump($participantSearch);

array:1 [▼
  0 => App\Entity\Participant {#1502 ▼
    -id: 10
    -names: "Mathias Keebler"
    -contact: 651286626
    -language: "Anglais"
    -type: "Jeunes intensif"
    -slug: "mathias-keebler"
    -regDate: DateTime @1633867465 {#1501 ▶}
    -courses: Doctrine\ORM\PersistentCollection {#1454 ▼
      -snapshot: array:1 [ …1]
      -owner: App\Entity\Participant {#1502}
      -association: array:15 [ …15]
      -em: Doctrine\ORM\EntityManager {#332 …11}
      -backRefFieldName: "participants"
      -typeClass: Doctrine\ORM\Mapping\ClassMetadata {#1397 …}
      -isDirty: false
      #collection: Doctrine\Common\Collections\ArrayCollection {#1452 ▼
        -elements: array:1 [▼
          0 => App\Entity\Course {#1337 ▼
            -id: 727
            -level: "Avancé"
            -module: "A"
            -moduleNum: 4
            -classDays: " Le Mercredi et Vendredi"
            -classTimes: "14H - 16H"
            -classRoom: "E"
            -libraryDay: "vendredi"
            -period: "Term 4"
            -payType: "Totalité"
            -payDescription: "A payer les frais d'inscription en totalité"
            -payReceived: 25000
            -regDate: DateTime @1615658277 {#1150 ▶}
            -participants: App\Entity\Participant {#1502}
            -reports: null
          }
        ]
      }
      #initialized: true
    }
  }
]

Ce que je veux

je veux afficher en vu twig le "names" du participant sur App\Entity\Participant et les elements de courses qui se trouvent sur App\Entity\Course .

Merci d'avance pour ceux qui prendront le temps de me repondre.

5 réponses


olive140
Réponse acceptée

{% for course in participant.courses %}

Bonjour,
tu as passé 'participantsSearch' à ta vue donc dans ton fichier 'participant/index.html.twig' tu dois pouvoir afficher les infos avec un for ... in :


{% for participant in participantsSearch %}
    <h2>{{ participant.names }}</h2>
    <ul>
    {% for course in participant.courses.elements %}
        <li>{{ course.id }} {{ course.module }}</li>
    {% enfor %}
    </ul>
{% endfor %}

Bonjour gillesr et merci pour ta réponse

j'ai fait comme ta dis

<table class="table table-sm table-striped m-0">
    <thead>
        <tr>
            <th scope="col">Noms et Prénoms</th>
            <th scope="col">Période</th>
            <th scope="col">Niveau</th>
            <th scope="col">Jours</th>
            <th scope="col">Heures</th>
            <th scope="col">Salle</th>
            <th scope="col">Action</th>
        </tr>
    </thead>
    <tbody>
    {% for participant in participantsSearch %}
        <tr class="table-light">
            <td>{{ participant.names }}</td>
            {% for course in participant.courses.elements %}
            <td>{{ course.period }} - {{ course.regDate|date("Y") }} </td>
            <td>{{ course.level }} {{course.module }}{{course.moduleNum }}</td>
            <td>{{ course.classDays }}</td>
            <td>{{ course.classTimes }}</td>
            <td>{{ course.payReceived }} FCFA</td>
            <td>
                <a class="btn btn-primary btn-sm" href="{{path('reportReel_create', {'id': course.id })}}"><i class="fas fa-plus me-1"></i>Bulletin</a>
            </td>
        </tr>
    {% endfor %}
    {% endfor %}
    </tbody>
</table>

Mais j'ai cette erreur:

Neither the property "elements" nor one of the methods "elements()", "getelements()"/"iselements()"/"haselements()" or "__call()" exist and have public access in class "Doctrine\ORM\PersistentCollection".

Bonjour olive140, Merci pour ta répose, ça marche! je parviens à tout affiché avec le code suivant:

<table class="table table-sm table-striped m-0">
    <thead>
        <tr>
            <th scope="col">Noms et Prénoms</th>
            <th scope="col">Période</th>
            <th scope="col">Niveau</th>
            <th scope="col">Jours</th>
            <th scope="col">Heures</th>
            <th scope="col">Salle</th>
            <th scope="col">Action</th>
        </tr>
    </thead>
    <tbody>
    {% for participant in participantSearch %}
        <tr class="table-light">
            <td>{{ participant.names }}</td>
            {% for course in participant.courses %}
            <td>{{ course.period }} - {{ course.regDate|date("Y") }} </td>
            <td>{{ course.level }} {{course.module }}{{course.moduleNum }}</td>
            <td>{{ course.classDays }}</td>
            <td>{{ course.classTimes }}</td>
            <td>{{ course.payReceived }} FCFA</td>
            <td>
                <a class="btn btn-primary btn-sm" href="{{path('reportReel_create', {'id_course': course.id })}}"><i class="fas fa-plus me-1"></i>Bulletin</a>
            </td>
        </tr>
    {% endfor %}
    {% endfor %}
    </tbody>
</table>

Un grand merci a vous les gars d'avoir pris le temps de me repondre et d'apporter une solution à mon problème