Php 原则2:错误:类别“\&引用;没有名为“…”的字段或关联&引用;
在搜索时,我得到了许多有类似问题的人的结果,但它们总是与关联错误有关。我正在尝试向数据库中的表中添加一个简单的文本字段,就我的一生而言,我不知道这次有什么不同,因为我以前多次这样做都没有遇到任何问题 我已经为4个不同的实体添加了一个“record_checksum”字段,但为了简化示例,我将只使用一个字段。(所有4个都会发生相同的错误) 下面是my Entity\Cloud.php文件的一个示例,底部添加了“记录\u校验和””字段: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
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,
我已经为这个把头撞在墙上好一阵子了。我肯定我忽略了一些非常愚蠢的事情。非常感谢您的帮助!
-尼克试着:
转到有问题的
实体
,检查变量名称。如果它类似于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到目前为止我经历了多少和什么,但这是实际问题。谢谢