salut
j'ai fait une relation many to one entre le table user et le table news
dans la classe News
class News
{
/**
* @ORM\ManyToOne(targetEntity="SN\UserBundle\Entity\User")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
lorsque j'ajoute une news l'ajout fonctionne normalement mais la colonne user-id dans le table news est toujour null comment resoudre ce probleme
merci
Bonjour,
avant de sauvegarder tes données en base il faut instancier le champ user_id en lui donnant la valeur
$this->getUser()->getId();
si tu extends base controller
$this->get('security.token_storage')->getToken()->getUser()->getId();
sinon.
Mais il est possible que je me trompe car je ne suis pas utilisateur de symphony (j'ai juste le souvenir d'avoir vu ça quelque part ^^).
Il serait donc préférable d'attendre confirmation.
Cordialement.
je penses que cela vient du nom du champ. Dans l'entité il est nommé "user", hors en base tu annonces qu'il est nommé "user-id" .
Essais donc d'ajouter: name="user-id", referencedColumnName="id" à joinColumn afin qu'il sache a quoi se referer.
Je te laisse adapter les de attributs a ton cas.
/**
* @ORM\ManyToOne(targetEntity="SN\UserBundle\Entity\User")
* @ORM\JoinColumn(name="user-id", referencedColumnName="id", nullable=false)
*/
private $user;
Après tu peux nous faire voir aussi le code ou tu enregistres la news pour être sûr que tu attaches bien l'utilisateur aussi.
public function addAction(Request $request)
{
if (!$this->get('security.context')->isGranted('ROLE_ADMIN')) {
// Sinon on déclenche une exception « Accès interdit »
throw new AccessDeniedException('Accès limité aux auteurs.');
}
$news = new News();
$form = $this->createForm(new NewsType(), $news);
if ($form->handleRequest($request)->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($news);
$em->flush();
// Ici, on s'occupera de la création et de la gestion du formulaire
$request->getSession()->getFlashBag()->add('notice', 'news bien enregistrée.');
// Puis on redirige vers la page de visualisation de cettte annonce
return $this->redirect($this->generateUrl('sn_sys_news_view', array('id' => $news->getId())));
}
return $this->render('SNSysNewsBundle:News:add.html.twig', array('form'=>$form->createView(),));
}
c'est le code pour ajouter une news
Tu peux aussi ajouter le code NewsType car là à aucun moment tu associes un utilisateur à ta news donc normal que ton champ reste à NULL. Y'a pas de magie, à un moment donné il faut faire un $news->setUser($user);
public function createAction(Request $request)
{
if (!$this->get('security.context')->isGranted('ROLE_USER')) {
throw new AccessDeniedException($this->get('translator')->trans('error.access_restricted', array(), 'DemoAppBundle'));
}
$news = new News();
if ($this->getUser()) {
$news->setAuthor($this->getUser());
}
$form = $this->createForm(new NewsType(), $news);
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($news);
$em->flush();
$this->get('session')->getFlashBag()->add('success', $this->get('translator')->trans('new.create.success'));
return $this->redirect($this->generateUrl('sn_sys_news_view', array('slug' => $news->getId())));
} else {
$this->get('session')->getFlashBag()->add('danger', $this->get('translator')->trans('idea.create.error'));
}
}
return array('form' => $form->createView());
}
Quelque chose comme ça, sans doute.