Symfony2:已删除的属性仍在查询中使用

时间:2013-04-09 13:04:41

标签: symfony doctrine-orm apc query-builder doctrine-query

我从enitiy(促销)中删除了一个属性(预告片)。 我使用CLi来更新数据库&的entites:

$ 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如何执行查询但未能找到问题的根源。 有人有任何线索吗?

UPDATE:我从查询中获取了DQL,由querybuilder生成,然后用它来创建一个新的Query。相同的错误。然后我将DQL中的一个单词从uppercae改为小写( 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缓存。

1 个答案:

答案 0 :(得分:2)

我的问题是APC缓存。

我无法在CLI( app / console )中清除 query-cache ,因为控制台无法(或不允许< / em>)清除APC缓存。 所以我不得不手动清除APC缓存。

解决方案是:

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

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