1

このコードのスニペットは私を夢中にさせています。

このすべての操作を行ったエンティティに、getter で呼び出すすべてのメンバーがあるとします (db とクラス ファイルのいずれか、さらに db にはすべての値が挿入されました)。

$this->logger->debug('INV ROOM RATES CAPACITY - $ROOM ID: '.$camera->getId());
$this->logger->debug('INV ROOM RATES CAPACITY - $ROOMCAPACITY: .$camera->getCapienza());
$this->logger->debug('INV ROOM RATES CAPACITY - CAMERA DB ID: '.$camera->getId());

これは以下を出力します

[2013-02-11 14:17:32] app.DEBUG: INV ROOM RATES CAPACITY - $ROOM ID: 14 [] []
[2013-02-11 14:17:32] app.DEBUG: INV ROOM RATES CAPACITY - $ROOMCAPACITY:  [] []
[2013-02-11 14:17:32] app.DEBUG: INV ROOM RATES CAPACITY - CAMERA DB ID:  [] []

->getCapienza()メソッドがすべてを台無しにしているようです(同じオブジェクトの2番目のゲッターは前の値を返しません)。明らかに、エラーや例外は発生しません。

何が起きてる?何か案は?私は何時間も立ち往生しています....

編集

public function getCapienza()
{
    return $this->capienza;
}
4

1 に答える 1

1

EntityManager を時々クリアしているとのことでしたので、もう少し掘り下げてみました。

https://github.com/doctrine/doctrine2/pull/406がマージされると、Doctrine ORM 2.4 で修正される既知の問題です。

この問題は、次のコードが原因で発生します: https://github.com/doctrine/doctrine2/blob/2.3.2/lib/Doctrine/ORM/UnitOfWork.php#L1724-L1780

基本的に、EntityManager から切り離されたプロキシをマージしたり、一般的に使用したりすることはできません (以前にそれらを遅延ロードしておく必要があります)。

あなたが経験している問題はhttp://www.doctrine-project.org/jira/browse/DDC-1734に関連しています

一時的な解決策は、デタッチされたインスタンスをリサイクルする代わりに、使用するデータを再フェッチすることです。

于 2013-02-11T14:10:37.073 に答える