php - Symfony 删除实体从不刷新

标签 php mysql symfony doctrine-orm symfony-3.3

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

    $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]: General error: 1205 Lock wait timeout exceeded;尝试重启事务

我注释掉了我尝试过但结果相同的代码。 MySql 日志文件在删除命令后显示 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 <...>

最佳答案

  • 您的表中有多少 session 行?
  • 您的 sessions.sess_id 列是否有索引?
  • 您是否尝试使用 mysql CLI 或 phpmyadmin 运行此查询?
  • 您是否在一些真实用户使用的应用程序上测试您的代码(如果是) 大约有多少?

请删除您的 session 和用户实体代码以检查关系

您的回答将帮助我回答您。

PS:抱歉,由于我的声誉,我不能写评论 (<50)

关于php - Symfony 删除实体从不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45593102/

相关文章:

php - 将 PHP PUT HTTP 请求转换为 ColdFusion

php - 如果存在则更新,否则插入(没有 ON DUPLICATE KEY UPDATE)

php - 如何自定义 Wordpress 中日期戳的外观?

mysql - Sequelize : How to use EXTRACT MySQL function

c# - MVC4 - Linq Lambda 表达式查询多个关联表

mysql - 无论如何,返回 IN 值的默认结果

php - Symfony - 使用命令运行 Phing 任务

php - 使用 PHP 正则表达式从字符串中提取年份

html - 在 Twig 中使用 Html 字符串进行 Json_Encode

php - PHP 特征的 UML 表示