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