2016-04-19 5 views
1

Ich versuche, das Formular aus dem Standardcontroller zu erstellen . Ich möchte, dass die Werte aus den Dropdownlisten in der Homepage in den ET1- und ET2-Spalten der Ereignistabelle gespeichert werden, was ich tun kann. Ich möchte jedoch, dass die user_id für den angemeldeten Benutzer auch in der Spalte user_id der Ereignistabelle gespeichert werden soll. Bei dem Versuch, dies zu tun, es gibt mir den Fehler:Eine Ausnahme ist während der Ausführung von INSERT INTO-Ereignissen (user_id, ET1, ET2) VALUES (?,?,?) Mit params [null, 2, 3] aufgetreten:

<?php 

namespace AppBundle\Entity; 

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* users 
* 
* @ORM\Table(name="users") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\usersRepository") 
*/ 
class users extends BaseUser 
{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

     /** 
    * Get id 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * @ORM\OneToMany(targetEntity="events", mappedBy="users") 
    */ 
    protected $multiEvents; 


    public function __construct() 
    { 
     parent::__construct(); 
     $this->multiEvents = new ArrayCollection(); 
     } 

    } 

Unten

An exception occurred while executing 'INSERT INTO events (user_id, ET1, ET2) VALUES (?, ?, ?)' with params [null, 2, 3]: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null

Hier ist mein Code für default

<?php 

namespace AppBundle\Controller; 

use AppBundle\Entity\events; 
//use AppBundle\Entity\eventtype; 
use AppBundle\Entity\users; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; 

class DefaultController extends Controller { 

    /** 
    * @Route("/home", name="homepage") 
    */ 
    public function indexAction(Request $request) { 
     $events = new events(); 

     $form = $this->createFormBuilder($events) 
       ->add('eT1', ChoiceType::class, array(
        'choices' => array(
         'Poker' => 1, 
         'Chess' => 2, 
         'Cricket' => 3, 
         'Marbles' => 4, 
         'Football' => 5, 
        ), 
        'choices_as_values' => true, 
       )) 
       ->add('eT2', ChoiceType::class, array(
        'choices' => array(
         'Poker' => 1, 
         'Chess' => 2, 
         'Cricket' => 3, 
         'Marbles' => 4, 
         'Football' => 5, 
        ), 
        'choices_as_values' => true, 
       )) 
       ->add('save', SubmitType::class, array('label' => 'Submit')) 
       ->getForm(); 

     if ($request->isMethod('POST')) { 
      $form->submit($request); 

      if ($form->isValid()) { 
       // perform some action, eg. persisting the data to database... 
       $user = $this->container->get('security.context')->getToken()->getUser(); 
       $id = $user->getId(); 
//    var_dump($id); 
//    exit; 
       $events->setuserID($id); 


       $em = $this->getDoctrine()->getManager(); 

       // tells Doctrine you want to (eventually) save the Product (no queries yet) 
       $em->persist($events); 

       // actually executes the queries (i.e. the INSERT query) 
       $em->flush(); 
       return $this->redirectToRoute('homepage'); 
      } 
     } 

     return $this->render('default/index.html.twig', array(
        'form' => $form->createView(), 
     )); 
    } 

Unterhalb der Benutzer etity ist die Ereignisse Einheit ist

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* events 
* 
* @ORM\Table(name="events") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\eventsRepository") 
*/ 
class events 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="user_id", type="integer") 
    */ 
    protected $user_id; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="ET1", type="integer") 
    */ 
    protected $eT1; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="ET2", type="integer") 
    */ 
    protected $eT2; 

    /** 
    * @ORM\ManyToOne(targetEntity="users", inversedBy="multievents") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    private $singleUser; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Get user_id 
    * 
    * @return integer 
    */ 
    public function getuser_id() 
    { 
     return $this->user_id; 
    } 

    /** 
    * Set user_id 
    * 
    * @param integer $user_id 
    * @return events 
    */ 
    public function setuserID($user_id) 
    { 
     $this->user_id = $user_id; 

     return $this; 
    } 

    /** 
    * Set eT1 
    * 
    * @param integer $eT1 
    * @return events 
    */ 
    public function setET1($eT1) 
    { 
     $this->eT1 = $eT1; 

     return $this; 
    } 

    /** 
    * Get eT1 
    * 
    * @return integer 
    */ 
    public function getET1() 
    { 
     return $this->eT1; 
    } 

    /** 
    * Set eT2 
    * 
    * @param integer $eT2 
    * @return events 
    */ 
    public function setET2($eT2) 
    { 
     $this->eT2 = $eT2; 

     return $this; 
    } 

    /** 
    * Get eT2 
    * 
    * @return integer 
    */ 
    public function getET2() 
    { 
     return $this->eT2; 
    } 

} 

Antwort

1

Ins Bevor Sie user_id einstellen, müssen Sie das user Objekt auf Ihrem events setzen.

aussetzen So die Setter auf den singleUser auf events Klasse (Sie die Definition der User_id Eigenschaft entfernen, die bereits als Beziehung definiert ist)

Ereignisse

public function setUser($user) 
{ 
this->singleUser = $user; 
} 

und direkt die Benutzer eingestellt Objekt in der Steuerung:

if ($form->isValid()) { 
     $user = $this->container->get('security.context')->getToken()->getUser(); 
     $events->setuser($user); 
    ... 

Hope this Hilfe

+1

Tausend Dank .. m neu zu symfony und war hier seit gestern fest .. das funktioniert perfekt jetzt :) – utkarsh2k2

+0

Nachdem ich die obige Lösung anwenden funktioniert der Code gut. Ich möchte jedoch auf den Wert user_id der Ereigniseinheit zugreifen. Wenn ich dies unter Verwendung von getuser_id() versuche, gibt es einen Fehler - Versuch, eine undefinierte Methode namens "getuser_id" der Klasse "AppBundle \ Entity \ events" aufzurufen. das Verfahren ist '/ ** * Get User_id * * @return integer */ public function getuser_id() { return $ this-> User_id; } ' – utkarsh2k2

Verwandte Themen