我从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缓存。
答案 0 :(得分:2)
我的问题是APC缓存。
我无法在CLI( app / console )中清除 query-cache ,因为控制台无法(或不允许< / em>)清除APC缓存。 所以我不得不手动清除APC缓存。
解决方案是:
$ php app/console doctrine:cache:clear-result
如果这不起作用,手动清除APC缓存(或您使用的任何缓存)。