0

Doctrine2は、遅延読み込みのためにProxyオブジェクトに魔法を追加しているようです。結果が不正確になり、原因がわかりません。

これが私のクラスモデルです:

クラス「RedProduct」は、インターフェース「BaseProduct」を実装する抽象クラス「Product」を継承します。

抽象クラスProductは主キーを保持します:

abstract class Product implements BaseProduct {
   /** @Id @Column (type="integer", name="ID") @GeneratedValue */
    protected $id;

    public function getId() {    
        return $this->id;        
    }                            
}

RedProductに、IDに文字「R」を付加してから返すようにします。

class RedProduct extends Product {
    public function getId() {
       return 'R' . $this->id;
    }
}

ただし、プロキシクラスでは、getId()メソッド(およびgetId()メソッドのみ)が次のように変更されています。

public function getId()
{
    if ($this->__isInitialized__ === false) {
        return $this->_identifier["id"];
    }
    $this->__load();
    return parent::getId();
}

これは、オブジェクトが初期化されていない場合、オブジェクトが正しいIDを返さないことを意味します。

「getId」はDoctrine2の予約済みまたは魔法のメソッドですか?基本クラスと継承クラスの両方で他のメソッドを作成すると、プロキシにこの影響はありません。

4

1 に答える 1

-1

プロキシの getId() メソッドを確認すると、次の行があることがわかります。

return parent::getId();

これは、すべてのプロキシが対応するモデルを拡張するため、モデル クラス (RedProduct) で定義された getId() 関数を呼び出すことを意味します。問題は別のところにあります。

モデルから返された ID を変更することで何を達成しようとしているのかわかりませんが、Doctrine はエンティティを永続化するときにゲッターを呼び出さず、リフレクションを使用するため、問題がデータベース内の ID が正しくないことである場合、これはが原因かもしれません。

于 2012-08-15T15:57:07.010 に答える