Php Symfony删除实体从不刷新

Php Symfony删除实体从不刷新,php,mysql,symfony,doctrine-orm,symfony-3.3,Php,Mysql,Symfony,Doctrine Orm,Symfony 3.3,我的应用程序有一个表单来管理用户角色。在表单提交时,当检测到角色更改时,必须从会话表中删除用户的会话记录: $form = $this->createForm('AppBundle\Form\UserType', $user); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em = $this-&g

我的应用程序有一个表单来管理用户角色。在表单提交时,当检测到角色更改时,必须从会话表中删除用户的会话记录:

    $form = $this->createForm('AppBundle\Form\UserType', $user);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $user->setRoles($this->setUserRoles($user));

        $changed = $this->checkChanged($em->getUnitOfWork()->getOriginalEntityData($user), $request->request->get('app_user_profile'));
        if ($changed) {
//            $sql = "DELETE FROM sessions WHERE sess_id = '".$user->getSessId()."'";
//            $em->getConnection()->exec($sql);
//            $em->getConnection()->commit();

            $entity = $em->getRepository('AppBundle:Sessions')->find($user->getSessId());
            if ($entity) {
                $em->remove($entity);
//                $em->flush($entity);
            }
            $user->setSessId(null);
        }
        $em->persist($user);
        $em->flush();
        return $this->redirectToRoute('users_list');
    }
但是此代码执行导致异常
SQLSTATE[HY000]:一般错误:超过1205锁等待超时;尝试重新启动事务

我注释掉了我尝试过的代码,得到了相同的结果。MySql日志文件显示delete命令后10秒的暂停,我不知道它在等待什么,甚至不知道为什么
$em->getConnection()->commit()在那里不起作用:

2017-08-09T10:02:36.334195Z   217 Connect   user@localhost on mydb using TCP/IP
2017-08-09T10:02:36.336556Z   217 Query SELECT t0.username AS username_1, <...> FROM fos_user t0 WHERE t0.id = 1 LIMIT 1
2017-08-09T10:02:36.373640Z   217 Query DELETE FROM sessions WHERE sess_id = '1gjo6har0vttn7ru63pjrptti4'
2017-08-09T10:03:27.489764Z   216 Query INSERT INTO sessions (sess_id, sess_data <...>
2017-08-09T10:02:36.334195Z 217连接user@localhost在mydb上使用TCP/IP
2017-08-09T10:02:36.336556Z 217查询从fos_用户t0中选择t0.username作为用户名_1,其中t0.id=1限制1
2017-08-09T10:02:36.373640Z 217查询从sess_id='1gjo6har0vttn7ru63pjrptti4'的会话中删除
2017-08-09T10:03:27.489764Z 216查询插入会话(sess_id,sess_数据
  • 您的表中有多少个会话行
  • sessions.sess\u id列上有索引吗
  • 您是否尝试使用mysql CLI或phpmyadmin运行此查询
  • 您是否在一些真实用户使用的应用程序上测试代码(如果是) 大概有多少
请删除会话和用户实体代码以检查关系

你的回答将有助于我回答你

PS:抱歉,由于我的声誉(
  • 您的表中有多少个会话行
  • sessions.sess\u id列上有索引吗
  • 您是否尝试使用mysql CLI或phpmyadmin运行此查询
  • 您是否在一些真实用户使用的应用程序上测试代码(如果是) 大概有多少
请删除会话和用户实体代码以检查关系

你的回答将有助于我回答你


PS:很抱歉,由于我的声誉,我无法发表评论(最后我发现这种奇怪的行为只适用于当前登录的用户。因此,对于当前用户,应该进行简单的注销:

if ($user->getId() == $this->getUser()->getId()) {
    return $this->redirectToRoute('fos_user_security_logout');
}

最后,我发现这种奇怪的行为只适用于当前登录的用户。因此,对于当前用户,应该进行简单的注销:

if ($user->getId() == $this->getUser()->getId()) {
    return $this->redirectToRoute('fos_user_security_logout');
}

我不知道问题的原因,但我建议您使用a在数据库中存储会话,然后在用户角色更改时实现使会话无效。我不知道问题的原因,但我建议您使用a在数据库中存储会话,然后在用户角色更改时实现使会话无效。