5

我正在尝试执行此代码:

$em->getConnection()->exec('LOCK TABLES Portfolio t0 WRITE, User u1_ READ);
$portfolio = $this->doctrine->getRepository('Portfolio')->findOneBy(array('user'=>$user->getId(), 'game'=>$game->getId()));
$assets = $this->doctrine->getRepository('Asset')->findBy(array('portfolio' => $portfolio, 'isActive' => 1));
$em->getConnection()->exec('UNLOCK TABLES;');

因此,当我执行此代码时,出现此错误:

执行 'SELECT t0.id AS id1 FROM Asset t0' SQLSTATE[HY000] 时发生异常:一般错误:1100 表 't0' 未使用 LOCK TABLES 锁定

在问这个问题之前,我必须给出一些解释。

  1. 要进行锁定,我们必须使用学说内部别名 (t0, u1_, ...),因为学说查询 findBy、findOneBy 最终会使用这些别名。
  2. 在MySql中,当我们加锁的时候,我们必须加锁所有在LOCK和UNLOCK语句中查询到的表。
  3. 我收到上述错误是因为我没有在我的 lock 语句中锁定表 Asset 别名 t0。
  4. 我无法使用别名 t0 锁定表 Asset,因为我已经有一个别名 t0 用于表 Portfolio。

所以问题是,我可以强制教义使用特定的内部别名吗?

4

0 回答 0