删除教义中的记录

2022-08-30 18:20:16

我试图删除教义中的记录,但我不知道为什么它没有删除。

这是我的代码:

function del_user($id)
{
    $single_user = $entityManager->find('Users', $id);

    $entityManager->remove($single_user);

    $entityManager->flush();
}

另外:如何回显查询以查看此处发生了什么?


答案 1

这是一个老问题,似乎还没有答案。作为参考,我将其留在这里供更多参考。您也可以查看教义文档

要删除记录,您需要(假设您在控制器中):

// get EntityManager
$em = $this->getDoctrine()->getManager();

// Get a reference to the entity ( will not generate a query )
$user = $em->getReference('ProjectBundle:User', $id);

// OR you can get the entity itself ( will generate a query )
// $user = $em->getRepository('ProjectBundle:User')->find($id);

// Remove it and flush
$em->remove($user);
$em->flush();

如果您只想删除实体而不首先检查它是否存在,则使用第一种获取引用的方法通常更好,因为它不会查询数据库,并且只会创建可用于删除实体的代理对象。

如果要首先确保此 ID 对应于有效的实体,则第二种方法更好,因为它会在尝试删除实体之前查询数据库以获取实体。


答案 2

为了我的理解,如果你需要删除教义中具有教义关系的记录,例如。一对多,多多和关联不能轻易删除,除非您将引用另一个关系的字段设置为 null。

......

你可以将其用于非关系学说

  $entityManager=$this->getDoctrine()->getManager();
 $single_user=$this->getDoctrine()->getRepository(User::class)->findOneBy(['id'=>$id]);

    $entityManager->remove($single_user);

    $entityManager->flush();
                       

但对于关系学说,将引用另一个关系的字段设置为空

$entityManager=$this->getDoctrine()->getManager();
     $single_user=$this->getDoctrine()->getRepository(User::class)->findOneBy(['id'=>$id]);
     {# assume you have field that reference #}
       
       $single_user->setFieldData(null);
        $entityManager->remove($single_user);

    $entityManager->flush();

推荐