【问题标题】:MappingException: The target-entity cannot be found after renaming class. Caching issue on production environmentMappingException:重命名类后找不到目标实体。生产环境缓存问题
【发布时间】:2022-10-18 21:18:50
【问题描述】:

我正在使用 Symfony 4.4 和教义 2.0.8 我最近一直在重构我们的很多代码,其中一些涉及重命名某些类名。这一切都很好,直到我们部署到我们的生产环境,在那里我得到 MappingExceptions 因为它一直试图找到旧的类名。

例如。

命名空间App\Entity\PortalUser中的关系 已重命名/移至 App\Entity 并重命名为 PortalUserRelationship.php

本地所有这些工作!

但是一旦我尝试bin/console cache:clear --env=prod,我就会收到以下错误:

The target-entity App\Entity\PortalUser\Relationship cannot be found in 'App\Entity\PortalUser#portalUserRelationships'.

当然这是有道理的,因为它在那个位置不再存在,但不知何故,教义仍在错误的地方寻找实体?

这是关系代码,只是为了证明它是正确的。

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\PortalUserRelationship", mappedBy="portalUser", orphanRemoval=true)
     */
    private Collection $portalUserRelationships;

因此,在某处某处无法清除生产缓存,我找不到如何清除此缓存的方法。

请注意 bin/console clear:cache --env=dev 有效,但 bin/console clear:cache --env=prod 失败。

我尝试了以下方法无济于事。

php bin/console doctrine:cache:clear-metadata
php bin/console doctrine:cache:clear-query
php bin/console doctrine:cache:clear-result

我也试过删除整个var/cache 文件夹,没有帮助。

我试过重启apache2服务器,不。

我在这里想念什么?

【问题讨论】:

  • PortalUser\Relationship 某处你有额外的反斜杠。我可能会补充一点,这些错误的最常见来源是包含实体类的 php 文件名与类名本身不匹配,这通常是因为区分大小写,但也可能是因为正斜杠与反斜杠问题。在 Windows 下工作的东西可能在 Linux 下不工作。
  • 我正在运行与服务器相同的环境。此外,这似乎只是一个教义问题,没有意识到某些事情已经改变。根据bin/console doctrine:schema:validate映射正确

标签: php symfony caching doctrine-orm


【解决方案1】:

我真的没有找到解决办法。

bin/console doctrine:mapping:info --env=dev 在所有内容上都显示 [OK] bin/console doctrine:mapping:info --env=prod 在我重命名的字段上显示 2 个映射错误。

我有一种感觉,作曲家自动加载使用错误/过时的文件来查找文件。

我已经运行composer dump-autoload 无济于事。 我已经对我的整个系统进行了 grep,以查找映射错误中使用的字符串,但找不到它。

我已经清除了所有的学说/symfony/composer 缓存,没有任何改变。 我已经重新启动了 apache2/php-fpm,没有任何改变。

唯一解决它的是将我的字段名称更改为 $portalUserRelationships 以外的任何名称,例如$portalUsersRelationships 工作。

我仍然 100% 确定这只是系统搞砸了在过时的文件中寻找映射,但我不太清楚它是从哪里获取数据的。

无论如何,对于任何有类似问题的人,请尝试重命名您的字段并希望它能够正常工作。

【讨论】:

    【解决方案2】:

    毕竟找到了解决办法。

    为失败的环境添加以下内容到教义.yml 修复了它。

    doctrine:
        orm:
            auto_generate_proxy_classes: true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多