Doctrine [语义错误]错误:类xxx没有名为yyy的字段或关联

时间:2014-04-16 11:21:04

标签: php entity-framework doctrine

您好,
 在过去的几天里,我遇到了关于学说的以下问题 - 因为我不允许粘贴任何源代码,我将尝试简要描述:

我正在使用doctrine orm,我需要在DB中的现有表中添加一个新列 - 数据库和实体之间的映射是通过xml映射文件完成的 - 这是我继续执行的步骤:

  1. 我已经添加到实体文件中 - 让我们称之为Entity.php - newColumn的新字段
  2. 我已将有关此newColumn的信息添加到XML映射文件中作为新的XML元素“field”
  3. 我已经执行了doctrine命令来根据编辑的映射文件
  4. 更改数据库的模式
  5. 我已更新EntityRepository.php文件中的查询以包含此新列。
  6. 当我运行应用程序时,我仍然收到此错误:

     [Semantical Error] Error: Class Entity.php has no field or association named newColumn
    

    所以,如果我正确理解这一点,那就是说在Entity.php中不是newColumn字段,应该是新的DB列映射。

    但事实并非如此,因为这是我迈出的第一步。

    我已经尝试过了:

    1. 检查所有文件中newColumn的名称是否没有拼写错误
    2. 检查Entity.php中的字段是否具有适当的访问修饰符 - 即它不是私有的
    3. 在存储了一些不良版本的Entity.php的情况下清除了缓存
    4. 我已经重新启动了应用程序运行的apache服务器
    5. 我仍然会一直收到同样的错误。

      我可能缺少什么想法?谢谢!

2 个答案:

答案 0 :(得分:4)

检查元数据缓存。如果你正在使用一些外部缓存机制(如Memcached或xcache),它可能在你的vhosts之间共享。如果一个vhost使用自己的映射元数据填充缓存(在apache重启之后),则第二个vhost只使用它而不关心不同的.dcm.xml映射。

如果它是您的开发服务器/虚拟主机,那么根本禁用ORM缓存通常要好得多( config / autoload / database.local.php )。

答案 1 :(得分:0)

也许我的问题和解决方案会对某人有所帮助。

/* * 
* @ORM\Column(name="user_id")  
*/ 
protected $userId;

不,变量名中没有拼写错误。访问是正确的,一切看起来都很好。 你们中的一些人可能已经看到了问题。 是。它是/ * *而不是/ **。我花了大约一个小时找到它:] 奇怪的是 - 它在加入时工作,但是当我在其中使用它时却没有。