Doctrine ReflectionException:属性不存在

26

我正在尝试在现有数据库上添加Doctrine。我让Doctrine生成带注释的实体并进行了调整。当我尝试加载下面的实体时,我会收到以下错误:PHP致命错误:未捕获异常'ReflectionException',消息为'Property Users\\User::$resellerID不存在'

class User
{
    /* ... */

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToOne(targetEntity="\Resellers\Reseller")
     * @ORM\JoinTable(name="reseller",
     *   joinColumns={
     *     @ORM\JoinColumn(name="resellerID", referencedColumnName="resellerID")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="resellerID", referencedColumnName="resellerID")
     *   }
     * )
     */
    private $reseller;

    /* ... */
}

用户表 user 和经销商表 reseller 都有 resellerID 列。我理解在连接 ID 列时,不需要将 ID 列作为实体类的属性添加。那么是什么导致了 ReflectionException 异常?

7个回答

66

由于我已将自动生成的属性 resellerID 重命名为 reseller(尝试使用后),结果我需要清除Doctrine缓存。

php vendor/bin/doctrine.php orm:clear-cache:result
php vendor/bin/doctrine.php orm:clear-cache:query
php vendor/bin/doctrine.php orm:clear-cache:metadata

或者,如果您正在使用Symfony和Doctrine:

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

如果给出的答案都不起作用怎么办? 自从2014年开始使用Symfony,直到我开始在实体中使用“json”和“json_array”类型之前,从未遇到过这样的问题。 - Diego Favero
1
@DiegoFavero 我会为您的情况打开一个新的问题。链接回这个问题,这样您就不会被标记为重复。我从未在实体中使用过这些类型,所以可能需要做一些特殊的处理。 - Matt S
做了一点研究,我认为我会在Doctrine的页面上开一个问题票,因为我没有找到任何类似的问题! - Diego Favero
以相同的顺序运行所有这些命令非常重要,顺便提一下。 - LugiHaue

3

对我而言,清除 PHP APC 缓存是解决方案

<?php
apc_clear_cache();

这最终是我所需要的 - 清除Doctrine缓存只是一种临时措施,只有当我重新启动memcached后,才能永久消除错误。 - beterthanlife
如果使用opcache.validate_timestamps = false标志和opcache一起,这个想法是一样的。通过重新启动Web服务器来清除缓存。感谢@michalzuber的建议! - lucian303

1
无论如何,它帮助了我。
php artisan  doctrine:clear:metadata:cache

0

通常在生产环境中,您需要像这样的东西:

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

0

如果有人正在使用 Docker 容器,请注意:

  1. 请在 PHP/Symfony 容器中使用终端。
  2. 输入旧答案中提到的 Doctrine 缓存清除命令:
    php bin/console doctrine:cache:clear-result
    php bin/console doctrine:cache:clear-query
    php bin/console doctrine:cache:clear-metadata

2. 在早期的答案中也提到了APC缓存清除,是否需要执行?
    php -r "apc_clear_cache();"
  1. 在 Docker 中重新启动你的 PHP/Symfony 容器。

作为最后一步的重新启动可以清除任何悬而未决的问题,至少对我来说是这样。希望这能帮助使用 Docker 的其他人。


0
在Symfony中,由于Docker容器权限的限制,我不得不手动删除/var/cache/下的所有内容。

0

当我尝试清除Doctrine缓存时,我的错误仍然发生。

对我有用的是通过删除/storage/framework/cache/*文件夹来手动清除缓存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接