原则 2:错误:类“..\..”没有名为“...”的字段或关联

Posted

技术标签:

【中文标题】原则 2:错误:类“..\\..”没有名为“...”的字段或关联【英文标题】:Doctrine 2: Error: Class "..\.." has no field or association named "..."原则 2:错误:类“..\..”没有名为“...”的字段或关联 【发布时间】:2012-05-22 22:49:02 【问题描述】:

在搜索时,我找到了很多人遇到类似问题的结果,但它们总是与关联错误有关。我正在尝试将一个简单的文本字段添加到数据库中的表中,对于我的生活,我无法弄清楚这次有什么不同 - 当我之前多次没有问题地完成它时。

我已经为 4 个不同的实体添加了一个“record_checksum”字段,但我将只使用一个,这里是为了简化示例。 (所有 4 个都会发生相同的错误)。

这是我的 Entity\Cloud.php 文件的示例,底部添加了“record_checksum”字段:

use Doctrine\ORM\Mapping as ORM;

namespace Entity;

/**
 * Entity\Cloud
 *
 * @orm:Table(name="cloud")
 * @orm:Entity
 * @orm:HasLifecycleCallbacks
 */
class Cloud

    /**
     * @var integer $id
     *
     * @orm:Column(name="id", type="integer", length="13")
     * @orm:Id
     * @orm:GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var float $position_x
     *
     * @orm:Column(name="position_x", type="float", length=9)
     */
    private $position_x;

    /**
     * @var float $position_y
     *
     * @orm:Column(name="position_y", type="float", length=9)
     */
    private $position_y;

    /**
     * @var string $commit_group
     *
     * @orm:Column(name="commit_group", type="string", length=32, nullable=true)
     */
    private $commit_group;

    /**
     * @var string $commit_key
     *
     * @orm:Column(name="commit_key", type="string", length=13, nullable=true)
     */
    private $commit_key;

    /**
     * @var string $record_checksum
     *
     * @orm:Column(name="record_checksum", type="string", length=32, nullable=true)
     */
    private $record_checksum;

该类的其余部分是 getter/setter 方法,因此我将其省略。要查看整个 Entity 文件,我将它放在 pastebin (http://pastebin.com/9LheZ6A1) 上。几周前我刚刚添加的“commit_key”,没有任何问题。

现在我更新架构:

$ doctrine orm:schema-tool:update --dump-sql
ALTER TABLE cloud ADD record_checksum VARCHAR(32) DEFAULT NULL;
$ doctrine orm:schema-tool:update --force
Updating database schema...
Database schema updated successfully!

我已验证该字段现在存在于 DB 表中。

但是,当我像这样运行一个简单的 DQL 查询时:

$dql =  "SELECT c.id AS id, c.commit_key AS key, c.record_checksum AS checksum ".
                "FROM Entity\\Cloud c WHERE c.commit_group = :commit_group";

我得到错误:

 [Semantical Error] line 0, col 42 near 'record_checksum': Error: Class Entity\Cloud has no field or association named record_checksum, 

我已经把头撞在墙上有一段时间了。我确定我忽略了一些非常愚蠢的事情。任何帮助是极大的赞赏! -尼克

【问题讨论】:

可以在dql中使用别名吗?例如select c from Entity\Cloud c 工作吗? 当我尝试这样做时,我得到了这个错误:无效的参数号:绑定变量的数量与令牌的数量不匹配, 如果您从 dql 中删除了与 :commit_group 的绑定,则可能必须删除该绑定。不确定您是否删除了 where 子句。 啊,当然。所以使用,例如:SELECT c FROM Entity\Cloud c WHERE c.id = 0,成功返回,除了record_checksum的所有字段 这很奇怪。您的映射看起来正确。数据库中是否有任何带有 record_checksum 的记录?或者你甚至不能调用 getRecordCheckSum() (或者你叫 getter 的任何东西)? 【参考方案1】:

尝试:

    清除任何可能包含配置或 PHP 代码的缓存。 重命名字段以防第一个解决方案不起作用。

【讨论】:

我完全忘记了我最近设置了 memcached!重新启动解决了问题。非常感谢白痴清单:) 我已将 apcu 配置为元数据缓存驱动器,因此在重新加载 PHP-FPM 守护程序后,它可以工作ma.ttias.be/clear-apc-cache-php【参考方案2】:

转到有问题的Entity 并检查变量名称。如果它类似于TESTVar,并且您尝试在查询中使用testVar,则会出现Entity 中不存在该变量的错误。

将查询更改为使用TESTVar 而不是testVar,这样就可以了。

【讨论】:

你救了我!我知道到目前为止我经历了多少和经历了什么,但这是实际问题。谢谢

以上是关于原则 2:错误:类“..\..”没有名为“...”的字段或关联的主要内容,如果未能解决你的问题,请参考以下文章

学说 symfony2 错误:Cocina\ComprasBundle\Entity\Productos 类没有名为proveedores 的关联

类没有名为的成员

派生类中的错误“<base class> 中没有名为 my_data 的类型”

错误:选择器“addChild”没有已知的类方法

Swift 类“MyClass”没有名为“My_Var”的成员 [重复]

错误: 类Something是公共的, 应在名为 Something.java 的文件中声明