Bonjour :)
Je travaille actuellement sur un projet sous symfony 4 qui m’oblige à créer des entités via une base de données déjà existante.
Je suis donc passé par la doc : https://symfony.com/doc/current/doctrine/reverse_engineering.html
En suivant cette doc, j’ai donc créé mes entités à l’aide de la commande :
php bin/console doctrine:mapping:import "App\Entity\Cogi" annotation --path=src/Entity/Cogi
Puis j’ai généré les getters et setters à l’aide de la commande :
php bin/console make:entity --regenerate App\Entity\Cogi
Jusqu’a cette étape, aucun problème, cependant j’ai maintenant besoin d’avoir des relations OneToMany les entités concernées
La doc indique :
If you want to have a OneToMany relationship, you will need to add it manually into the entity (e.g. add a comments property to BlogPost) or to the generated XML or YAML files. Add a section on the specific entities for one-to-many defining the inversedBy and the mappedBy pieces.
J’ai donc modifié mes fichiers Gclien00001.php et Gfactu00001.php, représentant mes entités de clients et de factures lié en OneToMany en ajoutant les use, les annotations, le __construct et les getters/setters suivants :
Gclient00001.php
<?php
namespace App\Entity\Cogi;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\JoinTable;
use Doctrine\ORM\Mapping\JoinColumn;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;
/**
*
* @ORM\Entity
*/
class Gclien00001
{
//Mes autres variables privates
/**
* @ORM\OneToMany(targetEntity="App\Entity\Cogi\Gfactu00001", mappedBy="Gclien00001")
*/
private $factures;
public function __construct()
{
$this->factures = new ArrayCollection();
}
//Mes autres getters / setters
/**
* @return Collection|Gfactu00001[]
*/
public function getFactures(): Collection
{
return $this->factures;
}
public function addFacture(Gfactu00001 $facture): self
{
if (!$this->factures->contains($facture)){
$this->factures[] = $facture;
$facture->setIdGclien($this);
}
return $this;
}
public function removeFacture(Gfactu00001 $facture): self
{
if ($this->factures->contains($facture)) {
$this->factures->removeElement($facture);
// set the owning side to null (unless already changed)
if ($facture->getIdGclien() === $this) {
$facture->setIdGclien(null);
}
}
return $this;
}
}
Gfactu00001.php
<?php
namespace App\Entity\Cogi;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Gfactu00001
{
//Mes autres privates
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Cogi\Gclien00001", inversedBy="factures")
* @ORM\JoinColumn(nullable=true)
*/
private $idGclien;
//Mes autres getters/setters
public function getIdGclien(): ?Gclien00001
{
return $this->idGclien;
}
public function setIdGclien(?Gclien00001 $idGclien): self
{
$this->idGclien = $idGclien;
return $this;
}
}
Cependant, j’ai du oublier une étape car lorsque j’affiche mes entités :
La variable idGclien de Gfactu00001 reste l'id de la factures
La variable factures de Gclient00001 est null
Du coup, je suis un peu perdu, est ce que vous auriez une idée de ce que j’ai oublié / là où je me suis trompé ?
Merci d’avance :)