我从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。
你运行过'app/console cache:clear --evn = prod'吗?也试试'rm -rf app/cache/*' – 2013-04-09 13:35:02
是的,我清除了所有环境的缓存。我遇到了使用该实体的所有querybuilder查询的错误。 – 2013-04-09 13:37:48
你确定这是有问题的查询吗?尝试在所有项目的搜索器中搜索谁知道...... – 2013-04-09 14:15:34