Doctrine 2 MongoDB ODMを使用していますが、1 つの特定の関係を除いてすべて正常に動作しています。あいまいなのは、プロジェクト内に一見同一の関係があり、それらがすべて正常に機能することです。
namespace Project\Entities\World; // same NS as class, but this is after
// splitting functionality from Entity to MappedSuperclass, didn't work either
/**
* @ReferenceOne(targetDocument="Project\Entities\World")
* @var IWorld
*/
protected $world;
Project\Entities\PlayerCharacter で使用 (上記の Project\Entities\World\Object を拡張) =>
namespace Project\Entities;
/**
* @Document(collection="worlds")
* @HasLifecycleCallbacks
*/
class World {
/**
* @ReferenceMany(targetDocument="PlayerCharacter")
* @var ArrayCollection
*/
protected $playerCharacters;
}
$world 変数を設定すると、PHP スクリプトで問題ありません。$objectManager->refresh($character), $character->getWorld() === $world でも問題ありません。ただし、データベース自体には表示されず (設定直後に終了し、どこかで誤って変更されないようにフラッシュします)、PlayerCharacter 側でのみ World 側にのみ表示されます。
一方で
class PlayerCharacter {
/**
* @ReferenceOne(targetDocument="User")
* @var User
*/
protected $user;
}
=>
/**
* @Document(collection="users")
* @HasLifecycleCallbacks
*/
class User {
/**
* @ReferenceMany(targetDocument="PlayerCharacter")
* @var ArrayCollection
*/
protected $characters;
}
作品
簡易版では:
- PlayerCharacter::$user <==(1:N)==> User::$characters
(およびその他すべて) は問題ありませんが、
- PlayerCharacter::$world <==(1:N)のみです。 ==> World::$playerCharacters
は World 側でのみ機能します
何日も見ていると、何も違うものを見つけることができません。
- プロパティ名の名前を変更しようとしましたが、変更はありません
- キャラクターのハイドレーター エントリ ---> ワールドが他と同じように見える
- エントリを半手動で (RockMongo 経由で) 追加すると、正常に動作します
- 「ワールド」フィールドを NULL として作成しても違いはありません。{} を使用すると、「未定義のインデックス: $id」と表示されますが、これは予想される動作だと思います。
- エンティティも個別に非常にうまく機能します。実際には、この 1 つの関係だけです。
不足している/見落とされているものはありますか、または永続化されない理由を発見するために何ができますか?
(さらに情報が必要な場合は投稿を編集します)
ありがとうございました!