2017-07-20 39 views
0

symfonyで追加フラッシュを使用してレコードに外部制約がある場合、どのようにエラーを出すのですか?この問合せでは、外部キーIDがNULLの場合はレコードを削除できますが、レコードに関連付けられている場合は削除できません。削除できない場合はメッセージが削除されます。しかし、エラーメッセージは実行されていません。これは、私が試したものです:Symfonyでの外部制約の削除

public function DeleteStudentRecord(){ 

       $query= $this->getDoctrine()->createQueryBuilder('a') 
       ->delete('AcmeDemoBundle: Student','a') 
       ->innerJoin('AcmeDemoBundle:Programme','c','WITH','a.c=a') 
       ->where('b.studentid IS NULL') 
       ->getQuery(); 
       return $query->getResult(); 
      } 

public function delete(Request $request, $studentid) 
    { 

     $form = $this->createDeleteForm($studentid); 
     $form->handleRequest($request); 

     if ($form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 

      $entity = $em->getRepository('AcmeDemoBundle:Student')->DeleteStudentRecord(); 

      if (!$entity) { 
       $this->addFlash('error','ERROR! You cannot delete Student Record'); 
       return $this->redirect($this->generateUrl('student')); 
      } 

      $em->remove($entity); 
      $em->flush(); 
     } 

     return $this->redirect($this->generateUrl('payrollperiod')); 
    } 

public function delete(Request $request, $studentid) 
{ 

    $form = $this->createDeleteForm($studentid); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 

     $entity = $em->getRepository('AcmeDemoBundle:Student')->DeleteStudentRecord(); 

     if (!$entity) { 
      throw $this->createNotFoundException('Unable to delete student record.'); 
     } 

     $this->addFlash('success','Successfully delete student record'); 

     $em->remove($entity); 
     $em->flush(); 
    } 

    return $this->redirect($this->generateUrl('payrollperiod')); 
} 

を変更しかし、これはどちらか、正しい結果が得られないか、それは正しくないのです。

+3

自分で試したことを投稿できますか? –

+0

Andrew私は質問で試したことを追加しました。これは達成可能ですか? –

+0

誰かが助けてください、私はこの部分と他に何かを知りません。アンドリューはあなたを助けることができますか? –

答えて

0

エンティティが存在するかどうかを確認してから削除できるかどうかを確認する必要があります。

public function delete(Request $request, $studentid) { 
    $form = $this->createDeleteForm($studentid); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 

     $entity = $em->getRepository('AcmeDemoBundle:Student') 
      ->findBy('studentId', $studentid); 

     if (!$entity) { 
      $this->addFlash('error', 
       'ERROR! Student Record with id: ' . $studentid . ' doesn't exist.' 
      ); 
      return $this->redirect($this->generateUrl('student')); 
     } 

     try { 
      $em->remove($entity); 
      $em->flush(); 
     // Catch the Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException 
     } catch(ForeignKeyConstraintViolationException $e) { 
      $this->addFlash('error', 
       '//Whatever message you want here' 
      ); 

      // Whatever action you want from here..... 
     } 
    } 
} 
+0

'ForeignKeyConstraintViolationException'の代わりに' ConstraintViolationException'を試してみてください –

+0

これは特定のコンポーネントに属していますか –

+0

例外のために 'use'ステートメントがあることを確認してください:http://www.doctrine-project.org/api/dbal/2.5 /class-Doctrine.DBAL.Exception.ConstraintViolationException.html –

関連する問題