0

次のコードを使用して、埋め込みドキュメントをドキュメントに挿入しようとしています。

  // Add states, for the joining player.
  $state = new PlayerState();
  $state->setReady(false);
  $state->setPlayer($player->getId());
  $game->addPlayerState($state);

  // Save element.
  $dm->persist($game);
  $dm->flush();

問題は、これにより 2 つの PlayerState Document がこのように生成されることです。

{ "_id" : ObjectId( "513f50a58ead0ee9ac00000f" ),
  "ready" : false,
  "player" : "513f509f8ead0e8bac00000b" }, 
{ "_id" : ObjectId( "513f50af8ead0ecdac000015" ),
  "ready" :false,
  "player" : "513f509f8ead0e8bac00000b" }

これを間違った方法で保存していますか?さらにコードが必要な場合はお知らせください。

4

1 に答える 1

0

これはトリックを行うように見えました。

  $state = new PlayerState();
  $state->setReady(false);
  $state->setPlayer($player->getId());
  $dm->persist($state);
  $dm->flush();
  $game->addPlayerState($state);
  // Save element.
  $dm->flush();

これを説明するのは難しいですが、試してみます。最初に埋め込まれたドキュメントを永続化する必要があります。それ以外の場合、Doctrine は最初にドキュメントを永続化し、単純なデータ コンテナーのように機能する、値が設定された埋め込みドキュメントのみを作成します。

  $state->setReady(false);
  $state->setPlayer($player->getId());

その後、doctrine は埋め込みドキュメントをもう一度永続化しますが、今回は Document オブジェクトを見て、ID やデフォルト値などを割り当てます。

結果、2点エントリー。

于 2013-03-12T19:33:39.817 に答える