Cascade OneToMany Symfony
Bonjour,
j'ai deux entités User et Sujet , un user peut ajouter plusieurs sujets . Dans la vue ,lorsque j'affiche le sujet j'affiche egalement le user qui l'a ajouté (username+imageuser ..)
Lorsque je veux supprimer un user , je veux garder ses sujets quand meme et lors de l'affichage des sujets , ces derniers auront comme username " anonyme"
Pour ce faire j 'ai implementé :
Sujet :
Code:
1 2 3 4 5 6 7 8 9 10
|
class sujet {
///// code ici
/**
* @ORM\ManyToOne(targetEntity="MyApp\UserBundle\Entity\User", cascade={"all"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id",nullable=false, onDelete="CASCADE")
*/
protected $user; |
User :
Code:
1 2 3 4 5 6 7
|
class sujet {
///// code ici
protected $sujets;
// get et set
} |
User Controller :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
public function deleteAction(user $user) {
$em = $this->getDoctrine()->getManager();
$selectuser = $em->getRepository('MyAppForumBundle:sujet')->findBySujet($user->getId());
/** je selectionne les sujets associé au user deja choisi **/
$ids = $user->getId();
$sujet = $em->getRepository('MyAppForumBundle:sujet')->getSujetByUser($ids);
foreach ($sujet as $s) /** update pour plusieurs sujets **/
/*** les sujets reuperé auont un nouveau id_user = 1 ***/
{ $p = $em->createQueryBuilder()
->update('MyAppForumBundle:sujet', 'd')
->set('d.user', '1')
->where('d.user = :v')
->setParameter('v', $s)
->getQuery()
->execute(); }
/***** je supprime le user choisi au debut ***/
$em->remove($user);
$em->flush();
$this->get('session')->getFlashBag()->set('message', 'Ce user disparait !!');
return $this->redirect($this->generateUrl('my_app_user_show', array(
'selectuser' => $selectuser
)));
} |
SujetRepository:
Code:
1 2 3 4 5 6
| public function getSujetByUser($id) {
return $this->getEntityManager()
->createQuery(' SELECT t FROM MyAppForumBundle:sujet t WHERE t.user=:id ')
->setParameter('id', $id)
->getResult();
} |
j'ai ensuite creé avec les fixtures :
un user avec username "anonyme" .
Ma logique marche .
La Question : es-ce que je peux faire mieux ?
Merci a tous .