Bonjour,

Pouvez-vous me dire quelle est la best pratices pour persister un objet contenu par un autre objet ?

Je m'explique :
J'ai un objet User (FOSUserBundle) qui contient un attribut "shop" en relation OneToOne (persist cascade remove) avec l'entity "Shop".
L'entity Shop contient une liste d'objets en relation OneToMany (persist cascade remove) avec l'entity "MyObjet".

Si je veux ajouter un "MyObjet" dans le "Shop" d'un "User", quelle est la meilleure méthode à faire dans le controller, méthode 1) ou 2) ou 3) ?

1) Avec le UserManager de FOSUserBundle ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$user = $this->getUser();
$user->getShop()->addMyObjet(new MyObject());
$userManager = $container->get('fos_user.user_manager');
$userManager->updateUser($user);
2) Entity Manager en récupérant le shop en amont ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
$entityManager = $this->getDoctrine()->getManager();
$shop = $this->getUser()->getShop();
$shop->addMyObjet(new MyObject());
$entityManager->persist($shop);
$entityManager->flush();
3) En récupérant directement le Shop d'un User ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$em = $this->getDoctrine()->getManager();
$shop= $em->getRepository('AppBundle:Shop')->findByUser($user);
$entityManager->persist($shop);
$entityManager->flush();
Personnellement je pense que la solution 3) est idiote mais j'hésites surtout entre la 1) et la 2).

Merci d'avance.