【问题标题】:Symfony - can't delete recordSymfony - 无法删除记录
【发布时间】:2025-06-24 14:05:02
【问题描述】:

我正在 Postman 中测试删除操作。我创建了一个删除操作,它一直返回“成功”,当我刷新数据库时,带有转发参数(id = 1)的行仍然存在。

我的服务。

    /**
 * Delete user
 * @param $id
 * @return mixed
 */
public function deleteUser($id)
{
    $query = $this->getUserRepository()
        ->createQueryBuilder('du')
        ->delete('ProjectBundle:User','du')
        ->where('du.id = :id')
        ->setParameter("id", $id)
        ->getQuery()
        ->execute();

    return $query;

}

控制器。

/**
 * @Route("/users/delete/{id}", name="user_delete")
 * @param $id
 * @return \Symfony\Component\HttpFoundation\JsonResponse
 * @throws \Doctrine\Common\Annotations\AnnotationException
 */
public function getUserDeleteAction($id)
{
    $this->get('user')->deleteUser($id);

    return $this->success();
}

我认为这是正确的方法,不知道问题出在哪里。

【问题讨论】:

  • 我不知道 succes() 的作用,但它似乎与 deleteUser() 没有任何关系。
  • 你能在 profiler > 学说中看到你的查询吗?
  • 嗯,你有软删除吗?
  • 是的,我可以。而且我认为我没有软删除?

标签: php mysql symfony


【解决方案1】:

你必须使用->remove()方法,像这样:

#controller
public function getUserDeleteAction($id)
{
    $em = $this->getDoctrine()->getManager();
    $user = $em->getRepository('AppBundle:User')->find($id);
    $em->remove($user);

    return $this->success();
}

信息here

【讨论】:

  • 这是一个错误。“EntityManager#remove() 期望参数 1 是一个实体对象,给定 NULL。”
  • 这很可能意味着$id中没有包含id的用户
  • @FilipStojanovic 是的,TobiasXy 是对的,你的 mysql 表中必须有一些用户,由 Doctrine 管理