我使用的是Symfony 4.4和doctrine 2.0.8。我最近重构了很多代码,其中一些涉及到重命名某些类名。这一切都工作得很好,直到我们部署到生产环境,在那里我得到了MappingException,因为它一直试图找到旧的类名。
例如:
命名空间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
文件夹,没有帮助。
我试过重新启动apache 2服务器,没有。
我错过了什么?
2条答案
按热度按时间xdnvmnnf1#
我真的没有找到解决办法。
bin/console doctrine:mapping:info --env=dev
在所有字段上显示[OK],bin/console doctrine:mapping:info --env=prod
在我重命名的字段上显示2个Map错误。我有一种感觉, composer autoload是使用错误的/过时的文件来寻找文件。
我已经运行了
composer dump-autoload
但没有用。我已经grep艾德我的整个系统来寻找Map错误中使用的字符串,但是找不到。我已经清除了所有的doctrine/symfony/composer缓存,没有任何变化。我已经重新启动了apache 2/php-fpm,没有任何变化。
唯一修复它的是将我的字段名称更改为
$portalUserRelationships
以外的任何名称,eidogg.$portalUsersRelationships
工作正常。我仍然100%肯定这只是系统在一个过时的文件中寻找Map时搞砸了,但我不太清楚它是从哪里获得数据的。
无论如何,对于任何有类似问题的人,尝试重命名你的字段,并希望上帝它的工作。
pprl5pva2#
将以下内容添加到失败环境的
doctrine.yml
中解决了该问题。