2012-05-22 93 views
3

當搜索時,我想出了許多有類似問題的人的結果,但他們總是與關聯錯誤有關。我試圖在數據庫的表格中添加一個簡單的文本字段,並且對於我來說,我無法弄清楚這次有什麼不同 - 當我以前做過很多次沒有問題的時候。學說2:錯誤:類「.. ..」沒有字段或關聯名爲「...」

我已經爲4個不同的實體添加了一個'record_checksum'字段,但我將只使用一個,這裏簡化示例。 (所有4都發生同樣的錯誤)。

這裏是我的實體\ 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方法,所以我將離開它。要查看整個實體文件,我將它放在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! 

我證實了這一領域目前在數據庫表中。

然而,當我運行一個簡單的查詢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, 

我撞了我的頭掛在牆上了這一段時間,現在。我確信我忽視了一些非常愚蠢的事情。任何幫助是極大的讚賞! -Nick

+0

你可以在dql中使用別名嗎?例如,'從Entity \ Cloud c'中選擇c'工作嗎? – Gohn67

+0

當我嘗試這樣做時,出現此錯誤:無效的參數編號:綁定變量的數量與令牌的數量不匹配, –

+0

如果您從dql中移除綁定,可能必須將該綁定移除到':commit_group'。不知道你是否刪除了where子句。 – Gohn67

回答

4

嘗試:

  1. 清除可能包含的配置或PHP代碼的任何緩存。
  2. 如果第一個解決方案不起作用,請重命名一個字段。
+3

我完全忘記了我最近設置了memcached!重新啓動解決問題。非常感謝這個傻瓜清單:) –

+0

urgh!謝謝 ;) – timhc22

0

轉到問題Entity並檢查變量名稱。如果它類似於TESTVar,並且您正在嘗試在查詢中使用testVar,它會給您提供該變量在Entity中不存在的錯誤。

更改查詢使用TESTVar而不是testVar,它將工作。