質問
私はDoctrine 2 ODM MongoDB(これと依存関係すべてGITから最新の依存関係) + PHP Mongo Extension(V1.1.4) + Mongo(V1.8.3 X64最新)を使用します
いくつかの場合、エンティティを変更すると、更新されないことが起こります
埋め込まれたエンティティで、私はその親にバック参照を持っています、解決するために http://groups.google.com/group/doctrine-dev/browse_thread/thread/016422b2cc9dcec9?pli=1 (埋め込みドキュメント内に親文書を取得する方法?)unitofworkなどの内部機能を使用せずに、これは関連する場合と関連性がない場合があります。これまでのところIRCで未回答になったかどうかの私の質問)
ただし、キャラクターの埋め込まれたドキュメントの1つの1つの変更がこれらのクエリをトリガーします(本当にそれだけに関連するはずです、それの前にフラッシュがあり、変更の直前に再び設定されたフラグのロガーの内部の条件がありました)
ロガーダンプ:
array(6) {
"update" => TRUE
"query" => array(1) {
"_id" => MongoId(1) {
"$id" => "4e3143be662c32400d000006" (24)
}
}
"newObj" => array(1) {
"$set" => array(2) {
"components.destructible.hp" => 99.28706276
"options.character" => array(3) {
"$ref" => "characters" (10)
"$id" => MongoId(1) { ... }
"$db" => "nuclearRain" (11)
}
}
}
"options" => array(0)
"db" => "someDB" (11)
"collection" => "characters" (10)
}
array(6) {
"update" => TRUE
"query" => array(1) {
"_id" => MongoId(1) {
"$id" => "4e553306662c32680800054b" (24)
}
}
"newObj" => array(1) {
"$set" => array(1) {
"createdBy" => array(3) {
"$ref" => "characters" (10)
"$id" => MongoId(1) { ... }
"$db" => "nuclearRain" (11)
}
}
}
"options" => array(0)
"db" => "someDB" (11)
"collection" => "worlds" (6)
}
array(6) {
"update" => TRUE
"query" => array(1) {
"_id" => MongoId(1) {
"$id" => "4e553306662c32680800054c" (24)
}
}
"newObj" => array(1) {
"$set" => array(1) {
"world" => array(3) {
"$ref" => "worlds" (6)
"$id" => MongoId(1) { ... }
"$db" => "nuclearRain" (11)
}
}
}
"options" => array(0)
"db" => "someDB" (11)
"collection" => "games" (5)
}
初期化コード: http://pastebin.com/1dkagqry
"components.destructible.hp" => 99.28706276 コアパーツ - >しかし、この変更はDBには決して反映されません
- PHPエラー/例外がトリガーされていません
- Mongoのログにはエラーが表示されません
- 一般的に、MongoとDoctrine odm Mongoは正常に実行され、エンティティが持続し、更新され、削除されます...
どこでさらに検索できますか、またはこの問題を解決するために何ができますかありがとう
解決
それは厄介ですが、問題は私が埋め込み装置をインデックス化したことを望んでいたことです(連想配列のように)...これは実際の教義が維持されたプロパティで行われたので、埋め込み文書を再塗り、変更を破棄しました
他のヒント
$friend = Zend_Registry::get('doctrine')->getDocumentManager()->createQueryBuilder('App\document\Message')->update()->field('unread')->set(TRUE)->field('viewer_id')->equals(10001)-> getQuery(array('multiple' => true))->execute();