Bonjour à tous,

Symfony m'indique :
"An exception has been thrown during the rendering of a template ("No mapping found for field 'option_vehicule' on class 'App\Entity\ListeOptionsVehicule'."). "

Je cherche à afficher la liste d'options pour chaque véhicule ...
Les relations ont l'air bonnes, ça métonne qu'il y ait vraiment besoin d'un mapping supplémentaire, je vois bien la propriété "listeoptionsvehicule" pour chaque vehicule dans un dump mais le tableau est curieusement vide...
Ou alors je me trompe dans la boucle du template TWIG ?
Je suppose qu'il manque un mappedBy quelque part mais étant débutant je ne sais pas comment l'implémenter...

Merci d'avance pour votre aide

listeoptionsvehicule.php:



namespace App\Entity;

use App\Repository\ListeOptionsVehiculeRepository;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: ListeOptionsVehiculeRepository::class)]
class ListeOptionsVehicule
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\ManyToOne(inversedBy: 'listeOptionsVehicule')]
    #[ORM\JoinColumn(nullable: false)]
    private ?Vehicules $vehicule = null;

    #[ORM\ManyToOne(inversedBy: 'listeOptionsVehicule', cascade: ['persist', 'remove'])]
    #[ORM\JoinColumn(nullable: false)]
    private ?OptionsVehicules $option_vehicule = null;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getVehicule(): ?Vehicules
    {
        return $this->vehicule;
    }

    public function setVehicule(?Vehicules $vehicule): self
    {
        $this->vehicule = $vehicule;

        return $this;
    }

    public function getOptionVehicule(): ?OptionsVehicules
    {
        return $this->option_vehicule;
    }

    public function setOptionVehicule(?OptionsVehicules $option_vehicule): self
    {
        $this->option_vehicule = $option_vehicule;

        return $this;
    }
}```

vehicules.php:
```<?php

namespace App\Entity;

use App\Entity\Trait\CreatedAtTrait;
use App\Entity\Trait\SlugTrait;
use App\Repository\VehiculesRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: VehiculesRepository::class)]
class Vehicules
{
    use CreatedAtTrait;
    use SlugTrait;

    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\OneToMany(mappedBy: 'vehicule', targetEntity: ListeOptionsVehicule::class, orphanRemoval: true)]
    private Collection $listeOptionsVehicule;

...

    public function __construct()
    {
        $this->photos = new ArrayCollection();
        $this->listeOptionsVehicule = new ArrayCollection();     
        $this->created_at = new \DateTimeImmutable();
        $this->favoris = new ArrayCollection();                    
    }

    /**
     * @return Collection<int, ListeOptionsVehicule>
     */
    public function getListeOptionsVehicule(): Collection
    {
        return $this->listeOptionsVehicule;
    }

    public function addListeOptionsVehicule(ListeOptionsVehicule $listeOptionsVehicule): self
    {
        if (!$this->listeOptionsVehicule->contains($listeOptionsVehicule)) {
            $this->listeOptionsVehicule->add($listeOptionsVehicule);
            $listeOptionsVehicule->setVehicule($this);
        }

        return $this;
    }

    public function removeListeOptionsVehicule(ListeOptionsVehicule $listeOptionsVehicule): self
    {
        if ($this->listeOptionsVehicule->removeElement($listeOptionsVehicule)) {
            // set the owning side to null (unless already changed)
            if ($listeOptionsVehicule->getVehicule() === $this) {
                $listeOptionsVehicule->setVehicule(null);
            }
        }

        return $this;
    }

}```

details.html.twig:
```{% extends "base.html.twig" %}
{% block title %}Détails véhicule
{% endblock %}
{% block body %}
    <div class="main">
        <h1 class="titre-principal">Fiche véhicule</h1>

        <a class="btn btn-go-back" href="{{path('app_vehicules_liste_vehicules')}}">Revenir à la liste</a>

        {{ include('_partials/_galerie-photos.html.twig') }}

        {# Fiche de détails véhicule #}
        ...
        {# Liste d'options du véhicule #}
        <table class="table liste-options-vehicules">
            <tbody>
                {% for option in vehicule.listeOptionsVehicule %}
                            {{dump(option.optionvehicule)}} 
                    {% if option %}
                        <tr>
                            <td>Option :
                                {{option.optionvehicule}}</td>
                        </tr>
                    {% endif %}
                {% endfor %}
            </tbody>
        </table>

    {% endblock %}```

3 réponses


Trop de code dans le sujet, peux tu l'éditer pour mettre le code en lien avec le problème seulement (pas tout ce qu'il y a autour qui ne sert pas). Merci ^^

Salut, il me semble avoir vu une erreur dans ton twig remplace {{option.optionvehicule}} par {{option.option_vehicule}} car dans ta class ListeOptionsVehicule le champ s'appelle option_vehicule

Bonjour,

C'est sympa d'avoir répondu...
J'en ai profité pour éditer le message qui était effectivement bien trop long...

J'ai trouvé la solution bien que je n'ai pas compris pourquoi :

Bien que Symfony indiquait une erreur dans le fichier "liste_options_vehicule" c'était en réalité le fichier "options_vehicules" qui contenait un "s" en trop dans un mappedBy...

C'est étonnant qu'il n'est pas réussi à viser la bonne entité non ?

Merci à vous