2

我从一个实体(销售)中删除了一个属性(预告片)。我使用 CLi 更新数据库和实体:

$ php app/console doctrine:schema:update --complete --force
$ php app/console doctrine:generate:entities Our --no-backup
$ php app/console doctrine:cache:clear-metadata
$ php app/console doctrine:cache:clear-result

我清除了缓存:

$ php app/console cache:clear --no-optional-warmers --no-warmup

现在我有一个由查询生成器创建的查询:

$qb = $this->createQueryBuilder('s');
$q = $qb
    ->select('s.id')
    ->leftJoin('s.bills','b')
    ->where('b.paid = true')
    ->getQuery()
    ->getResult();

这会引发错误,因为它会生成一个包含旧属性的 select 语句:

Column not found: 1054 Unknown column 's0_.teaser' in 'field list'

我试图了解 Doctrine 如何执行查询,但未能找到问题的根源。有没有人有任何线索?

更新:我从查询中获取 DQL,由 querybuilder 生成,然后用它来创建一个新的查询。同样的错误。然后我将 DQL 中的一个单词从大写更改为小写(LEFT现在是Left)并且那个执行得很好。

$q = $this->getEntityManager()
->createQuery('SELECT s,b FROM Our\BuyBundle\Entity\Sale s Left JOIN s.bills b WHERE s.id IN (:randomIds)')
->setParameter('randomIds', $allSaleIds);

所以看起来 DQL 语句被缓存在某个地方,使用 DQL 作为哈希来获取相应的 SQL 语句。我仍然无法弄清楚在哪里以及如何清除缓存的信息。特别是考虑到我也删除了 app/cache 文件夹中的所有内容。

UPDATE2:找到解决方案。必须手动清除 APC 缓存,因为控制台不能这样做。所以解决方案是:

$ php app/console doctrine:cache:clear-query

如果这不起作用,请清除您的 APC 缓存。

4

1 回答 1

2

我的问题是 APC 缓存。

我无法清除CLI ( app/console ) 中的查询缓存,因为控制台无法(或不允许)清除 APC 缓存。所以我不得不手动清除 APC 缓存。

解决方案是:

$ php app/console doctrine:cache:clear-result

如果这不起作用,请手动清除 APC 缓存或您使用的任何缓存)。

于 2013-04-09T14:18:50.153 回答