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 文档。

{ "_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());

之后,教义将再次持久化嵌入的文档,但这次查看 Document 对象,分配 ID,默认值等。

产生2个条目。

于 2013-03-12T19:33:39.817 回答