Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 使用em删除对象->;删除($user)删除表中的所有对象_Symfony_Doctrine Orm - Fatal编程技术网

Symfony 使用em删除对象->;删除($user)删除表中的所有对象

Symfony 使用em删除对象->;删除($user)删除表中的所有对象,symfony,doctrine-orm,Symfony,Doctrine Orm,我有一个用户实体,它实现了用于RBAC系统的UserInterface。我还没有实施整个系统。但是,当我尝试使用以下代码删除用户时,该操作会删除其他表中的所有用户和其他关联对象,然后抛出一个错误。我能够从其他实体中删除对象而不会出现问题 用户实体 class User implements UserInterface { ** * @var integer $id * * @ORM\Column(name="id", type="smallint") * @ORM\Id * @ORM

我有一个用户实体,它实现了用于RBAC系统的UserInterface。我还没有实施整个系统。但是,当我尝试使用以下代码删除用户时,该操作会删除其他表中的所有用户和其他关联对象,然后抛出一个错误。我能够从其他实体中删除对象而不会出现问题

用户实体

class User implements UserInterface
{
 **
 * @var integer $id
 *
 * @ORM\Column(name="id", type="smallint")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * 
protected $id;

 **
 * @var string $username
 *
 * @ORM\Column(name="username", type="string", length=20, unique=TRUE)
 * 
protected $username;

 **
 * @var string $password
 *
 * @ORM\Column(name="password", type="string", length=255)
 * 
protected $password;

 **
 * @var string $salt
 *
 * @ORM\Column(name="salt", type="string", length=255)
 * 
protected $salt;

 **
 * @var string $fullName
 *
 * @ORM\Column(name="full_name", type="string", length=60, unique=TRUE)
 * 
protected $fullName;

 **
 * @ORM\ManyToMany(targetEntity="Role", inversedBy="users", cascade={"persist", "remove"})
 * @ORM\JoinTable(name="users_roles")
 * 
 * @var ArrayCollection $userRoles
 * 
protected $userRoles;

public function __construct()
{
    $this->userRoles = new ArrayCollection();
}
}
删除操作

public function deleteUserAction($id) {
$user = $em->getRepository('ACMECompanyBundle:User')->find($id);
$currentUser = $this->get('security.context')->getToken()->getUser();
if ($id == $currentUser->getId()) {
    return new Response("You cannot delete the current user");
}        
if (!$user) {
    throw $this->createNotFoundException('No user found for id '.$id);
}
try {
    $em->remove($user);
    $em->flush();
    $msg = "User deleted!";
    $code = "OK";
} catch (DBALException $e) {
    return new Response($e);
    $msg = "User cannot be deleted!";
    $code = "ERR";
}
$response = new Response(json_encode(array('code' => $code, 'msg' => $msg)));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
删除所有用户后返回的错误为

InvalidArgumentException:无法从不包含标识符的EntityUserProvider刷新用户。用户对象必须使用其自己的标识符进行序列化,该标识符由条令映射


当条令删除该用户时,它还会删除分配给该用户的所有roll以及分配给这些角色的所有用户。因此,根据您的注释模式,这是正确的行为,因为$userRoles注释中的cascade={“remove”}和角色实体中$users注释中的cascade={“remove”}


如果要防止级联删除并保持级联持久删除用户和角色关系中的“remove”参数

您在操作中遗漏了em的定义。。。定义为

$em = $this->getDoctrine()->getEntityManager();

它应该会起作用。除非您在类本身上设置它,否则您将需要从两个实体中删除“remove”,更新模式,并且问题仍然存在。已创建新用户,但未向其分配任何角色。删除此新用户还将删除所有现有角色和用户。我可以毫无问题地删除角色。删除用户将清空users表。是否覆盖存储库中的find方法?如果是,请检查它是否返回一个或多个用户。如果您有一些事件,还可以检查post/preRemove事件。为我们提供完整用户实体类的更多代码谢谢您的帮助。我在Gist上有我的代码,我没有UserRepository或任何post或pre方法。我甚至尝试使用findOneBy(array('id'=>$id))。尝试添加两个parentId为null的用户,并删除其中一个。如果只删除了一个用户,请在$children注释中将“all”替换为“persist”,或者在$parentUser->removeChildren($user);”之后添加$user->setParent(null);。如果所有用户都被删除,那么我将进一步挖掘。它仍在删除所有用户。另外,在我使用
$parentUser->removeChildren($user)
从父级中删除子级并刷新后,父级id不会更改为“null”,我可以使用
$user->getParent()获取父级。这不应该起作用吗?我应该只使用DBAL吗?