Php 原则2:错误:类别“\&引用;没有名为“…”的字段或关联&引用;

Php 原则2:错误:类别“\&引用;没有名为“…”的字段或关联&引用;,php,orm,doctrine-orm,dql,Php,Orm,Doctrine Orm,Dql,在搜索时,我得到了许多有类似问题的人的结果,但它们总是与关联错误有关。我正在尝试向数据库中的表中添加一个简单的文本字段,就我的一生而言,我不知道这次有什么不同,因为我以前多次这样做都没有遇到任何问题 我已经为4个不同的实体添加了一个“record_checksum”字段,但为了简化示例,我将只使用一个字段。(所有4个都会发生相同的错误) 下面是my Entity\Cloud.php文件的一个示例,底部添加了“记录\u校验和””字段: use Doctrine\ORM\Mapping as ORM

在搜索时,我得到了许多有类似问题的人的结果,但它们总是与关联错误有关。我正在尝试向数据库中的表中添加一个简单的文本字段,就我的一生而言,我不知道这次有什么不同,因为我以前多次这样做都没有遇到任何问题

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

下面是my Entity\Cloud.php文件的一个示例,底部添加了“记录\u校验和””字段:

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方法,因此我将省略它。为了查看整个实体文件,我将其放在pastebin()上。我几周前刚刚添加的“提交密钥”没有问题

现在我更新模式:

$ 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, 
我已经为这个把头撞在墙上好一阵子了。我肯定我忽略了一些非常愚蠢的事情。非常感谢您的帮助! -尼克

试着:

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

  • 转到有问题的
    实体
    ,检查变量名称。如果它类似于
    TESTVar
    ,并且您试图在查询中使用
    TESTVar
    ,它会给您一个错误,即
    实体中不存在该变量


    将查询更改为使用
    TESTVar
    而不是
    TESTVar
    ,它就会工作。

    您可以在dql中使用别名吗?例如,
    从Entity\Cloud c中选择c
    是否有效?当我尝试此操作时,会出现以下错误:参数编号无效:绑定变量的数量与令牌的数量不匹配,如果从dql中删除,可能必须删除绑定到
    :commit_group
    。不确定你是否删除了where子句。啊,当然。例如,使用:SELECT c FROM Entity\Cloud c,其中c.id=0,会成功返回所有字段,除了record\u checksum,这很奇怪。您的映射看起来很正确。数据库中是否有具有记录校验和的记录?或者你甚至不能调用getRecordCheckSum()(或者你称之为getter的任何东西)?我完全忘了我最近设置了memcached!重新启动它修复了问题。非常感谢白痴清单:)我已经将apcu配置为元数据缓存驱动器,所以在重新加载PHP-FPM守护程序后,它工作了,您救了我!Idk到目前为止我经历了多少和什么,但这是实际问题。谢谢