2013-04-09 27 views
2

我从enitiy(sale)中删除了一个属性(teaser)。 我用CLI来更新数据库&的entites:Symfony2:查询中仍使用删除的属性

$ 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(); 

这抛出错误becuas eit生成包含旧属性的select语句:

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

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

更新:我从querybuilder生成的查询中取出了DQL,然后用它来创建一个新的Query。同样的错误。然后我把DQL中的一个单词从大写字母改成了小写字母(现在是),那个执行得很好。

$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

你运行过'app/console cache:clear --evn = prod'吗?也试试'rm -rf app/cache/*' – 2013-04-09 13:35:02

+0

是的,我清除了所有环境的缓存。我遇到了使用该实体的所有querybuilder查询的错误。 – 2013-04-09 13:37:48

+1

你确定这是有问题的查询吗?尝试在所有项目的搜索器中搜索谁知道...... – 2013-04-09 14:15:34

回答

2

我的问题是APC缓存。

我不能清除CLI的查询缓存应用程序/控制台),因为控制台不能(或不允许)清除APC缓存。 所以我不得不手动清除APC缓存。

解决办法是:

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

如果不工作,明确的APC缓存手动(或任何高速缓存使用)。