由于存在内部学说而无法锁定表

hak*_*oun 5 mysql doctrine locking aliases

我正在尝试执行以下代码:

$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;');
Run Code Online (Sandbox Code Playgroud)

因此,当我执行此代码时,我会遇到以下错误:

执行'SELECT t0.id AS ID1 FROM Asset t0'时发生异常SQLSTATE [HY000]:常规错误:1100表't0'没有被LOCK TABLES锁定

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

  1. 要进行锁定,我们必须使用原则内部别名(t0,u1 _...),因为原则查询findBy,findOneBy finaly使用这些别名。
  2. 在MySql中,当我们锁定时,我们必须锁定在LOCK和UNLOCK语句中查询的所有表。
  3. 我收到上述错误,因为我没有在我的lock语句中锁定别名为t0的表Asset。
  4. 我无法使用别名t0锁定表Asset,因为我已经有用于表Portfolio的别名t0。

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