[Symfony 3.2] Cloner une entité vers une autre entité

Fermé
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - Modifié par patrice86 le 14/02/2017 à 10:20
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - 14 févr. 2017 à 10:20
Bonjour,

Je dispose d'une entité qui me sert d'entité mère :
/**
 * Partner
 *
 * @ORM\Table(name="customer")
 * @ORM\Entity(repositoryClass="XXX\RhBundle\Repository\CustomerRepository")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="status", type="string")
 * @ORM\DiscriminatorMap({"client" = "Client", "hostess" = "Hostess"})
 */
abstract class Customer



Deux entités filles héritent de cette entité mère :
/**
 * @ORM\Entity(repositoryClass="XXXX\RhBundle\Repository\ClientRepository")
 * @ORM\Table(name="client")
 */
class Client extends Customer
{
...
}


/**
 * @ORM\Entity(repositoryClass="XXXX\RhBundle\Repository\HostessRepository")
 * @ORM\Table(name="client")
 */
class Hostess extends Customer
{
...
}


Enfin, j'ai une classe Meeting qui est liée à la classe Hostess :
/**
 * @ORM\Entity
 * @ORM\Table(name="meeting")
 * @ORM\Entity(repositoryClass="DomiGestion\MeetingBundle\Entity\MeetingRepository")
 */
class Meeting
{
/**
     * @ORM\ManyToOne(targetEntity="DomiGestion\RhBundle\Entity\Hostess", inversedBy="meeting")
     */
    protected $hostess;
}


J'ai créé un FormType pour la classe Meeting avec, pour le champ hostess, un type EntityType qui pointe vers la classe mère Customer.
L'intérêt est que l'utilisateur doit pouvoir choisir aussi bien un Client ou un Hostess pour créer une réunion. Hors, comme meeting dispose d'un attribut qui pointe vers Hostess, si j'envoie un Customer de type Client, j'obtiens une erreur lors du handleRequest($request) :
Expected argument of type "XXX\RhBundle\Entity\Hostess", "XXX\RhBundle\Entity\Client" given


C'est normal, je n'envoie pas le bon type.

En fait ce que je veux faire, c'est que si l'utilisateur envoie un Client à la place d'un Hostess, avant le handleRequest, tester si il s’agit d'un type Client. Si oui, alors je copie les informations du Client pour créer un objet de type Hostess et je modifie l'objet Request pour indiquer le nouveau Hostess créer juste avant et le handleRequest($request) fonctionnera correctement (normalement...).

Des idées pour faire ça ? Je suis un peu perdu dans le fonctionnement du form dans se cas là.

Merci !!! :) :)
A voir également:

1 réponse

patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
14 févr. 2017 à 10:20
up !
Merci.
0