2015-06-12 50 views
0

我有一個從兩個相關實體'Jobs'和'Scope'收集數據的表單。作業數據成功添加到數據庫中,但我無法獲取要添加的作用域實體,這也需要從作業條目創建的唯一標識。順便說一句,我正在使用教條。Symfony 2 persistence使用從第一個實體生成的ID形式的2個實體

這裏是jobsType:

class jobsType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder 
      ->add('jobNumber', null, array('label' => 'Job Number','attr' => array('placeholder'=>'Code used for job'))) 

     ->add('description', null, array('label' => 'Job Description',)) 

     ; 

     $builder->add('scopes', new scopeType()) 
     ; 

    } 
    public function getName() 
    { 
     return 'jobs'; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
       'data_class' => 'Baker\TimeSlipBundle\Entity\Jobs', 
     )); 
    } 

} 

這裏是scopeType

class scopeType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 

     ->add('description', 'entity', array('label' => 'Scope', 'required' => false, 
       'class' => 'BakerTimeSlipBundle:Scope', 
       'query_builder' => function(EntityRepository $er){ 
        return $er->createQueryBuilder('s') 
        ->orderBy('s.description', 'asc'); 
       }, 
       'property' => 'description', 
       'multiple' => false, 
       'expanded' => false, 
       'empty_value' => false, 
       'attr' => array('class' => 'form-inline'), 
       'label_attr' => array('class' => 'required') 
     )) 

     ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
       'data_class' => 'Baker\TimeSlipBundle\Entity\Scope', 
     )); 
    } 

    public function getName() 
    { 
     return 'scope'; 
    } 
} 

這裏是我的控制,我覺得這裏的問題是,我不是合格的範圍()實例的形式建設者。我不知道該怎麼做。該實體映射正確。

class JobsController extends Controller 
{ 

    public function indexAction($limit, Request $request) 
    { 

     $jobs= new Jobs(); 
     $scope = new Scope(); 

     $fname=$limit; 
     $form = $this->createForm(new JobsType(),$jobs, array(
       'method' => 'POST', 
     )); 
     $form->handleRequest($request); 

     if ($form->isValid()) { 

      $em = $this->getDoctrine()->getManager(); 
         $em->persist($jobs); 
         $em->persist($scope); 
      $em->flush(); 

      return $this->redirectToRoute('company',array ('limit' =>'Job Submitted Successfully')); 
     } 


     return $this->render(
       'BakerTimeSlipBundle:Jobs:index.html.twig', 
       array('fname' => $fname, 
         'form' => $form->createView() 

       ) 
     ); 

     } 
    } 
} 

在這裏的任何幫助將不勝感激。下面列出的錯誤消息,當我試圖進入範圍:

在執行時發生異常 '(?,?,?)INSERT INTO範圍(描述,jobsId,jobsid)VALUES' 使用參數[空, NULL,NULL]: SQLSTATE [42000]:語法錯誤或訪問衝突:1110列「jobsId」指定了兩次

+0

當然沒有關係,但你應該有你的表單處理請求只有'如果($請求 - > isMethod( 'POST')){}'。另外,您應該通過執行'$ jobs = $ form-> getData();'來檢索'$ jobs'。 – D4V1D

+0

感謝您的建議,我認爲允許教條來處理您必須使用$ this-> getDoctrine() - > getManager()的依賴關係。 – user3248331

回答

0

這裏的問題是$工作對象鏈接到您的形式已與$範圍沒有關係目的。所以當你試圖堅持$工作時,Doctrine不知道它的範圍,它必須堅持下去。

就試試這個:

$jobs= new Jobs(); 
$scope = new Scope(); 
$jobs->setScope($scope); 

然後,在你的工作單位,在上述$範圍註釋,請確保您有cascade={"persist"}(但你必須已經擁有它,因爲學說試圖堅持,而這也正是錯誤被拋出),你應該很好走。

希望這有助於

+0

嗯,我沒有任何setScope方法。這應該創建在哪裏? – user3248331

+0

你的工作實體應該有範圍屬性的標準getter和setter。如果不是,請添加它們。更一般地說,查看每個實體的每個屬性都有它的獲取者和設置者。 –

+0

謝謝,這似乎是正確的答案。雖然當我嘗試堅持範圍它不會傳遞任何值。儘管喬布斯現在正確添加。可能是我的scopeType表單類的問題。我編輯了原始問題,以便現在可用。 – user3248331

相關問題