Dawaine Leslie
Dawaine Leslie

Reputation: 7

Foreign Key issues in Symfony

I am having this issue where I'm only able to get the error message. I have some tables where student id is the foreign key, however even thou the id number is not any of the tables it still gives the message "You cannot delete this Student" but won't pass there if it can be deleted

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'));

    }

Upvotes: 0

Views: 71

Answers (2)

Jovan Perovic
Jovan Perovic

Reputation: 20193

First, your naming is a bit off. You need to fix it as it tends to be a bit confusing. With that in mind, I suggest you do it like this:

1. Controller method to check if student is deletable:

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. Controller's action to invoke the above

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'));
}

Hope this help and clarifies a bit.

Upvotes: 1

user742736
user742736

Reputation: 2729

I think you are calling findBystudentid wrong because findBystudentid is not in the Entity.

Here is the updated version

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'));
}

Also findBystudentid should be a private function

private function findByStudentId() ...

Upvotes: 0

Related Questions