Relations entre entités
Dans notre cas nous avons déjà l'entité Customer. Nous allons ajouter une relation de type 1 à plusieurs vers des adresses (dans Customer, une relation OneToMany).
Créez une 2nd entité Address.
Revenez dans votre entité Customer (php bin/console make:entity
puis Customer
), puis créez un champ address
de type relation
.
Nommez customer_id le champ de stockage des customers dans la table address.
Ensuite, dans votre contrôleur CustomerAdmin, où vous appelez des champs dans le formulaire via la fonction configureFormFields
, ajoutez dans la fonction ce code pour appeler la relation :
$addressFieldOptions = [ // see available options 'multiple' => true, 'label' => 'Address', 'class' => 'App\Entity\Address', 'required' => true, 'property' => 'getAdd1', 'by_reference' => true, 'translation_domain' => 'SonataUserBundle' ]; $formMapper->add('address', ModelType::class, $addressFieldOptions) ;
Afin de gérer le lien avec les id des customers au moment de l'enregistrement (dans customer_id), ajoutez cette nouvelle fonction après configureFormFields
.
public function preUpdate($object) { foreach ($object->getAddress() as $address) { $address->setCustomer($object); } }
Enfin, afin de gérer la suppression, retournez dans l'entité Customer, au niveau de la relation OneToMany, pour ajouter un cascade
et un orphanRemoval
.
/** * @ORM\OneToMany(targetEntity="App\Entity\Address", mappedBy="customer", cascade={"all"}, orphanRemoval=true) */ private $address;