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'));
}
首先,你的命名是有点过。你需要修复它,因为它往往有点混乱。考虑到这一点,我建议你做这样的:
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'));
}
希望这个帮助和澄清一点。
你的学生在其他地方有被远程使用的机会吗? –
发生了什么事?你有没有设法让它运行? –
是的,我做了,谢谢你的回答 –
我认为你打电话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() ...
获取尝试调用方法的错误 –
是的,@ user742736是正确的。从外观上看,'findBystudentid'属于你的'Controller'类,而不是你的仓库... –
我只是想找到学生ID是否存在于表中,然后返回true或false –
$ delete!= $ deletable – JimL
它实际上是可删除而不是删除。 –
您的'$ deletable'属于'bool'类型。为什么?因此,您将无法''em-> remove()' –