2013-04-05 2 views
1

Что я хочу сделать следующий:Вставка данных из формы в базу данных

  1. Создание простой формы с FormBuilder

  2. Когда форма передается результат будет сохранен в базе данных для конкретного пользователя (на основе на его ID)

В дополнение является кодом от контроллера:

public function helloAction(Request $request, $id){//displaying individual results for particular user// 


// find the username which was in the view// 

    $em = $this->getDoctrine()->getManager(); 
     $query = $em->createQuery('SELECT b FROM AcmeWebBundle:baza b WHERE b.id = :id') 
     ->setParameter('id',$id); 
     $total = $query->getResult(); 

$baza = new baza(); 

    $em = $this->getDoctrine()->getManager(); 
     $em->persist($baza); 
     $form = $this->createFormBuilder($baza) 
        ->add ('rating','choice',array('label'=>'TEST44','choices'=>array(
         '1'=>'1', 
         '2'=>'2', 
         '3'=>'3', 
         '4'=>'4' 
         ), 

        'expanded'=>true, 
        'multiple'=>false 
        )) 
        ->getForm(); 


     if ($request->getMethod() == 'POST') { 
      $form->bindRequest($request); 

      if ($form->isValid()) { 
       // perform some action, such as saving the task to the database 
       $em->flush(); 

       return new Response('<h1>THANKS FOR Your feedback !!!!</h1>'); 

      } 


     } 


return $this->render('AcmeWebBundle:Default:hello.html.twig',array('all'=>$total,'id'=>$id ,'form'=>$form->createView())); 
} 
} 

Но это создает новую строку в базе данных и добавляет значение только для столбца рейтинга. Кроме того, поле id, имя пользователя и т. Д. Пустые.

Что я хочу сделать, рейтинг будет добавлен для оценки количества, но для конкретного идентификатора.

+0

Вы называете '$ em-> persist ($ baza)' на каждом запросе «GET»? Вы должны очистить свой разум от реорганизации своих идей. –

ответ

0

В следующем примере я создаю форму, получить данные о POST и затем сохраняются на свежий объект или модифицированный один, есть не имеет смысла в сохранении пустого объекта.

public function historialAction(Request $request) 
{ 
$form = $this->createFormBuilder() 
->add('phone', 'text', array('attr' => array('autofocus' => ''))) 
->add('period', 'number', array('attr' => array('value' => '12'))) 
->getForm(); 

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

    // data is an array with "phone" and "period" keys 
    $data = $form->getData(); 

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

    $contract = $em->getRepository('FrontBundle:Contract')->getContractByPhone($data["phone"]); 
    $contract->setOwner("John Doe"); 
    $contract->setPhone($data["phone"]); 

    // or this could be $contract = new Contract("John Doe", $data["phone"], $data["period"]); 


    $em->persist($contract); // I set/modify the properties then persist 
} 
0

Вы можете установить рейтинг объекта пользователя, как так ..

if ($form->isValid()) 
    $rating = $form->get('rating')->getData(); 
    $user->setRating($rating); 
    // Assuming $user is the user entity 

    // etc.. 
Смежные вопросы