删除的sql语句仍由symfony cache

时间:2016-01-05 09:54:15

标签: php symfony caching

我正在使用Symfony 2.7

我没有使用doctrine,而是构建了一个执行所有原始sql语句的服务,并且称为RawSQLManager。

随机地,当我多次拉出相同的URL时,我的dev.log文件中出现了严重错误。我不明白它是如何可能的。

在我的项目开始时,我已经构建了这个函数:

public function getFolderInfo($id_folder)
{

    $sql = 'SELECT zs.ID, zs.Nom, zs.Principale, zs.Archive, zs.DateHeureModification
        FROM Zones_Stockages zs
        WHERE zs.ID = :id_folder;';

    $params['id_folder'] = $id_folder;
    $stmt = $this->conn->prepare($sql);
    $stmt->execute($params);

    return $stmt->fetch();
}

现在,我没有使用这个功能,她被删除了,没有人在我的整个项目中使用这个功能。

但是我的日志:

[2016-01-05 10:16:09] doctrine.DEBUG: SELECT t0.Principale AS Principale_1, t0.Archive AS Archive_2, t0.Nom AS Nom_3, t0.DateHeureModification AS DateHeureModification_4, t0.ID AS ID_5, t0.Abonnements_ID AS Abonnements_ID_6 FROM Zones_Stockages t0 WHERE t0.ID = ? ["7385"] []

你可以看到,这是完全相同的声明,在我的项目中没有任何地方有类似的声明。

[编辑] :我的初始陈述中没有Abonnements_ID。

我已使用以下内容清除了缓存:

 app/console doctrine:cache:clear-metadata 
 app/console doctrine:cache:clear-query  
 app/console doctrine:cache:clear-result 

甚至删除我的缓存文件夹。这句话仍然被称为。

这个奇怪的调用是在我在服务器上执行的每个请求时调用的,有时会在我的Abonnements实体上发生严重错误,但我不明白这与前一个调用有什么关系以及如何启动调试这个实体有什么问题。

[2016-01-05 10:16:09] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: rename(C:\wamp\www\app\cache\dev/doctrine/orm/Proxies\__CG__AppBundleEntityAbonnements.php.568b89d923b5a9.13683491,C:\wamp\www\app\cache\dev/doctrine/orm/Proxies\__CG__AppBundleEntityAbonnements.php): " at C:\wamp\www\vendor\doctrine\common\lib\Doctrine\Common\Proxy\ProxyGenerator.php line 306 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ContextErrorException(code: 0): Warning: rename(C:\\wamp\\www\\app\\cache\\dev/doctrine/orm/Proxies\\__CG__AppBundleEntityAbonnements.php.568b89d923b5a9.13683491,C:\\wamp\\www\\app\\cache\\dev/doctrine/orm/Proxies\\__CG__AppBundleEntityAbonnements.php):  at C:\\wamp\\www\\vendor\\doctrine\\common\\lib\\Doctrine\\Common\\Proxy\\ProxyGenerator.php:306)"} []

连续两个问题:

  1. 对幽灵声明的召唤。
  2. 在相同网址上随机附加并使用相同参数的严重错误。
  3. 我想念的是什么?

2 个答案:

答案 0 :(得分:1)

关于“ghost语句”,原因只能是:代码以某种方式仍然存在于应用程序中......或者某些缓存已经存在(例如Opcache或Web服务器中的类似)。

关于“严重错误”,触发它的代码行是代码中的rename($tmpFileName, $fileName);,为实体创建Doctrine代理。由于这只是文件重命名,因此这可能是缓存目录中的权限问题。

答案 1 :(得分:0)

问题在于,Doctrine的代理类生成代码不能很好地处理并发请求。它可以在类似Unix的系统上运行,但不能在Windows上运行,在Windows上,您不能仅对打开的文件进行重命名。

请参阅教义包的配置。您最喜欢将auto_generate_proxy_classes设置为“%kernel.debug%”(这是symfony标准版中的默认设置)。

尝试将auto_generate_proxy_classes更改为false。现在,如果您更改实体,则必须手动清除缓存,但是该错误应该消失了。