从数据库中执行删除操作不起作用,我不明白为什么

时间:2019-11-29 23:33:09

标签: php symfony symfony4 crud sql-delete

我有一个与基地合作的实体

class Task
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $title;

    /**
     * @ORM\Column(type="boolean", nullable=true)
     */
    private $status;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getTitle(): ?string
    {
        return $this->title;
    }

    public function setTitle(string $title): self
    {
        $this->title = $title;

        return $this;
    }

    public function getStatus(): ?bool
    {
        return $this->status;
    }

    public function setStatus(?bool $status): self
    {
        $this->status = $status;

        return $this;
    }
}

我还有一个控制器可以处理这个对象的对象。 实现了创建,更新和读取,但是删除不起作用

    /**
     * @Route("/delete/{id}", name="delete_task")
     * @param Task $id
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
     */
    public function delete(Task $id)
    {
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->remove($id);
        $entityManager->flush();

        return $this->redirectToRoute('to_do_list');
    }

从列表中删除对象时,会产生此错误

enter image description here

如何解决此问题。

添加 enter image description here

3 个答案:

答案 0 :(得分:1)

尝试此方法,准确指定您希望删除的内容

    /**
     * @Route("/delete/{id}", name="delete_task")
     * @param $id
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
     */
    public function delete($id)
    {
        $tasks = $this->getDoctrine()->getRepository(Task::class)->find($id);
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->remove($tasks);
        $entityManager->flush();

        return $this->redirectToRoute('to_do_list');
    }

答案 1 :(得分:1)

也尝试此方法,准确指定要删除的内容。我在项目中使用它


if($request->get("id_product_remove"))
   {
       $id = intval($request->get("id_product_remove"));

       $Product= $this->getDoctrine()->getRepository(Product::class)->find($id);
       $entityManager = $this->getDoctrine()->getManager();
       $entityManager->remove($Product);
       $entityManager->flush();
   }

答案 2 :(得分:0)

您很有可能需要安装SensioFrameworkExtraBundle,然后Symfony会自动将您的标识符变成一个实体。

这里是文档https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html