1

我正在尝试使用 Doctrine 更新嵌入式文档,结构如下所示。

{ "_id" : ObjectId( "513a3e4a0380543b40000000" ),
  "active" : true,
  "created" : 1362771530,
  "difficulty" : "Titan",
  "map" : { "$ref" : "Map",
    "$id" : ObjectId( "513631e4504a10f516b82ca7" ),
    "$db" : "fantasytd" },
  "mode" : "Coop",
  "password" : "adasdasda",
  "playerLimit" : 4,
  "players" : [ 
    { "$ref" : "Guest",
      "$id" : ObjectId( "5135c5300380549b03000001" ),
      "$db" : "fantasytd" }, 
    { "$ref" : "Guest",
      "$id" : ObjectId( "511fdc5f0380546d02000000" ),
      "$db" : "fantasytd" } ],
  "playerStates" : [ 
    { "id" : "5135c5300380549b03000001",
      "ready" : false }, 
    { "id" : "511fdc5f0380546d02000000",
      "ready" : false } ],
  "title" : "adskmaskldmasdmklas" }

现在我想使用这段代码将播放器的就绪状态设置为 true。

$q = $this->get('doctrine_mongodb')
  ->getRepository('FantasytdGameBundle:Game')
  ->createQueryBuilder()
  ->hydrate(false)
  ->update()
  ->field('id')->equals($id);

$update = $paramFetcher->get('update');
if($update == 'ready') {
  $session = new Session();
  $session->start();
  // Load player using accesstoken.
  $player = $session->get($paramFetcher->get('accesstoken'));
  // Set player to be ready, if exist.
  $q->field('playerStates.id')->equals($player->getId());
  $q->field('playerStates.ready')->set('true');
}

$q->getQuery()->execute();

这不会产生任何错误,也不会改变就绪状态。一直在调试这段代码的每一点,所有的值都是有效的。

4

0 回答 0