Symfony中的外键问题

问题描述:

我遇到此问题,我只能得到错误消息。我有一些学生ID是外键的表,但即使你的ID号码不是任何表格,它仍然给出信息“你不能删除这个学生”,但如果它可以删除将不会通过那里Symfony中的外键问题

public function findBystudentid($studentid) 
    { 


    $record= $this->getEntityManager()->getRepository('AcmeDemoBundle:record')->findBy(['studentid' => $studentid]); 
      $lecture = $this->getEntityManager()->getRepository('AcmeDemoBundle:lecture')->findBy(['studentid' => $studentid]); 
      $faculty = $this->getEntityManager()->getRepository('AcmeDemoBundle:faculty')->findBy(['studentid' => $studentid]); 
      if ($record||$lecture||$faculty){ 
         return true; 
        } else { 
         return false; 
        } 
} 

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

     $em = $this->getDoctrine()->getManager(); 
     $deletable = $em->getRepository('AcmeDemoBundle:Student')->findBystudentid($studentid); 

      if ($deletable) { 
       $this->addFlash('error','ERROR! You cannot delete this Student'); 
      } 
      else 
       { 

       $em->remove($deletable); 
       $em->flush(); 
       $this->addFlash('error','Student Deleted'); 
       } 
      return $this->redirect($this->generateUrl('Student')); 

    } 
+0

$ delete!= $ deletable – JimL

+0

它实际上是可删除而不是删除。 –

+0

您的'$ deletable'属于'bool'类型。为什么?因此,您将无法''em-> remove()' –

首先,你的命名是有点过。你需要修复它,因为它往往有点混乱。考虑到这一点,我建议你做这样的:

1.控制器的方法来检查,如果学生是可删除的:

private function isStudentDeletable($studentid) 
{ 
    $em = $this->getEntityManager(); 

    $record= $em->getRepository('AcmeDemoBundle:record')->findBy(['studentid' => $studentid]); 
    if ($record){ 
     return false; 
    } 

    $lecture = $em->getRepository('AcmeDemoBundle:lecture')->findBy(['studentid' => $studentid]); 

    if ($lecture){ 
     return false; 
    } 

    $faculty = $em->getRepository('AcmeDemoBundle:faculty')->findBy(['studentid' => $studentid]); 

    if ($faculty){ 
     return false; 
    } 

    return true; 
} 

2.控制器的动作来调用上述

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

    $deletable = $this->isStudentDeletable($studentid); 

    if (!$deletable) { 
     $this->addFlash('error','ERROR! You cannot delete this Student'); 
    } 
    else 
    { 
     $em = $this->getDoctrine()->getManager(); 
     $student = $em->getRepository('AcmeDemoBundle:Student')->find($studentid) 
     $em->remove($student); 
     $em->flush(); 
     $this->addFlash('error','Student Deleted'); 
    } 

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

希望这个帮助和澄清一点。

+0

你的学生在其他地方有被远程使用的机会吗? –

+0

发生了什么事?你有没有设法让它运行? –

+0

是的,我做了,谢谢你的回答 –

我认为你打电话findBystudentid错误,因为findBystudentid不在实体中。

这里是更新的版本

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

    $em = $this->getDoctrine()->getManager(); 
    $deletable = $this->findBystudentid($studentid); 

    if ($deletable) { 
     $this->addFlash('error','ERROR! You cannot delete this Student'); 
    } else { 
     $em->getRepository('AcmeDemoBundle:Student')->findBy(['studentid' => $studentid]) 
     $em->remove($deletable); 
     $em->flush(); 
     $this->addFlash('error','Student Deleted'); 
    } 

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

而且findBystudentid应该是一个私有函数

private function findByStudentId() ... 
+0

获取尝试调用方法的错误 –

+0

是的,@ user742736是正确的。从外观上看,'findBystudentid'属于你的'Controller'类,而不是你的仓库... –

+0

我只是想找到学生ID是否存在于表中,然后返回true或false –