我有一个用户实体,可以实现用户接口与RBAC系统一起使用。我尚未实施整个系统。但是,当我尝试使用以下代码删除用户时,该操作会删除其他表中的所有用户和其他关联对象,然后给我带来错误。我能够在没有问题的情况下从其他实体中删除对象。
用户实体
class User implements UserInterface
{
**
* @var integer $id
*
* @ORMColumn(name="id", type="smallint")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*
protected $id;
**
* @var string $username
*
* @ORMColumn(name="username", type="string", length=20, unique=TRUE)
*
protected $username;
**
* @var string $password
*
* @ORMColumn(name="password", type="string", length=255)
*
protected $password;
**
* @var string $salt
*
* @ORMColumn(name="salt", type="string", length=255)
*
protected $salt;
**
* @var string $fullName
*
* @ORMColumn(name="full_name", type="string", length=60, unique=TRUE)
*
protected $fullName;
**
* @ORMManyToMany(targetEntity="Role", inversedBy="users", cascade={"persist", "remove"})
* @ORMJoinTable(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刷新用户。用户对象必须与学说映射的自己的标识符序列化。
您在操作中忽略了em的定义...用
定义它$em = $this->getDoctrine()->getEntityManager();
它应该起作用。除非您将其设置在课堂本身上,否则您需要$this->...
当学说删除用户时,它还删除了分配给该用户的所有卷以及分配给这些角色的所有用户。因此,根据您的注释模式,这是正确的行为,因为cascade = {" remove"}在$ userroles注释中,cascade = {" remove"}在$ users the cool entity中。
如果您想防止级联删除并希望保持级联持续的删除"删除"参数,从用户和角色关系