等待UPDATE在SELECT之前完成

时间:2014-07-29 09:45:36

标签: sql symfony select doctrine-orm sql-update

经过几次调试后,我遇到了一个问题我无法找到答案。 基本上,我正在做一个UPDATE语句,然后是同一个表上的SELECT语句。 似乎当SELECT发生时,UPDATE没有完成,因为我得到旧的值。

为什么更新没有完成,以及如何让它在select之前等待?

以下是两个陈述

更新

$stmt = $this->getDoctrine()->getManager()->getConnection()
             ->prepare('UPDATE Event
                        SET `begin` = :startTo,  `end` = :endTo
                        WHERE ' . $field .' = :' . $field);
$stmt->bindValue('startTo', $startTo);
$stmt->bindValue('endTo', $endTo);
$stmt->bindValue($field, $elem);
$stmt->execute();
$em->flush();

选择

$qb = $em->getRepository('EntOrganizationBundle:Event')->createQueryBuilder('e');
$qb->where('(e.begin BETWEEN :start AND :end
            OR e.end BETWEEN :start AND :end
            OR e.begin <= :start AND e.end >= :end)')
   ->andWhere('e.template = 0')
   ->andWhere('e.break = 1')
   ->setparameter(':start', $start)
   ->setparameter(':end', $end);
$events = $qb->getQuery()->getResult();

这是因为我同时使用查询构建器和原始SQL吗?

谢谢,

2 个答案:

答案 0 :(得分:1)

感谢adhocgeek我解决了我的问题。 这是一个缓存问题。

使用原始SQL和QueryBuilder似乎并不是一个好主意,由于缓存,QueryBuilder并不知道原始SQL所做的更改。

我刚在QueryBuilder之前做过$em->clear();

答案 1 :(得分:0)

来自here

  

Doctrine 2已经为您完成了正确的事务划分:所有写操作(INSERT / UPDATE / DELETE)都排队,直到调用EntityManager#flush(),它在单个事务中包装所有这些更改

因此,在您提交查询之前,您需要flushcommit更新。