Id not found when changing a OneToMany relation to a ManyToMany relation

49 views Asked by At

I have a working OneToMany relation between my class Devis and my class Dossier.

This is my class Devis:

/**
 * @ORM\Entity
 * @ORM\Table(name="devis")
 * @ORM\Entity(repositoryClass="App\Repository\DevisRepository")
 * @ORM\HasLifecycleCallbacks
 */
class Devis extends AbstractEntity
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer", options={"unsigned"=true}, name="id_devis")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Dossier", mappedBy="devis")
     */
    private $dossier;

and this is my class Dossier:

/**
 * @ORM\Entity
 * @ORM\Table(name="dossier")
 * @ORM\Entity(repositoryClass="App\Repository\DossierRepository")
 * @ORM\HasLifecycleCallbacks
 */
class Dossier extends AbstractEntity
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer", options={"unsigned"=true}, name="id_dossier")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Devis", inversedBy="dossier")
     * @ORM\JoinColumn(name="id_devis", referencedColumnName="id_devis" , nullable=true)
     */
    private $devis;

I'm trying to update to a ManyToMany relation. So I updated my class Devis like this:

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Dossier", mappedBy="devis")
     */
    private $dossiers;

and my class Dossier like this:

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Devis", inversedBy="dossiers")
     * @ORM\JoinTable(
     *     name="devis_dossier",
     *     joinColumns={
     *          @ORM\JoinColumn(name="id_devis", referencedColumnName="id_devis", nullable=true)
     *     },
     *     inverseJoinColumns={
     *          @ORM\JoinColumn(name="id_dossier", referencedColumnName="id_dossier", nullable=true)
     *     }
     * )
     */
    private $devis;

But when I try to create my migration with php bin/console make:migration I have this error :

In MissingColumnException.php line 15:

  Column name "id_devis" referenced for relation from App\Entity\Dossier towards App\Entity\Devis does not exist.  

Why the id named id_devis is not found by the referencedColumnName ?

I also tried to change both referencedColumnName to "id" like that:

     *     joinColumns={
 *          @ORM\JoinColumn(name="id_devis", referencedColumnName="id", nullable=true)
 *     },
 *     inverseJoinColumns={
 *          @ORM\JoinColumn(name="id_dossier", referencedColumnName="id", nullable=true)
 *     }

With this configuration, I can create my migration but the SQL inside is false and not working:

$this->addSql('ALTER TABLE devis_dossier ADD CONSTRAINT FK_AFA67B6B65A2841B FOREIGN KEY (id_devis) REFERENCES dossier (id)');
$this->addSql('ALTER TABLE devis_dossier ADD CONSTRAINT FK_AFA67B6BE3D54947 FOREIGN KEY (id_dossier) REFERENCES devis (id)');

Because the REFERENCES (id) use for the CONSTRAINT does not exist. (only id_devis and id_dossier exist)

What can I do to make my ManyToMany relation work ?

0

There are 0 answers