我该如何添加嵌入式文档?

时间:2013-01-26 20:43:04

标签: php mongodb symfony doctrine

我为我的游戏文档

获得了这个结构

游戏文档。

{ "_id" : ObjectId( "51043d468ead0e0757000006" ),
  "active" : true,
  "created" : 1359232326,
  "difficulty" : 0,
  "map" : { "$ref" : "Map",
    "$id" : ObjectId( "5103c0228ead0e3764000000" ),
    "$db" : "mydb" },
  "mode" : "coop",
  "players" : [ 
    { "$ref" : "User",
      "$id" : ObjectId( "50d83abf038054b560000000" ),
      "$db" : "mydb" } ],
  "title" : "testgame" }

现在我想在此游戏中添加其他玩家,这就是我尝试过的

  $user = $this->get('doctrine_mongodb')
    ->getRepository('FantasytdUserBundle:User')
    ->findById($userId);

  $db->createQueryBuilder()
    ->update()
    ->field('id')->equals($gameId)
    ->field('players')->push($user)
    ->getQuery()
    ->execute();

另外

$user = array_pop($user->toArray());

没有运气,我得到的只是

“不允许使用零长度密钥,您是否使用带双引号的$?”

在我的学说文档中,玩家被定义为对用户的引用。

1 个答案:

答案 0 :(得分:0)

AFAIK主义2不能推文件。你应该准备数组: 尝试这样的事情:

$user = $this->get('doctrine_mongodb')
  ->getRepository('FantasytdUserBundle:User')
  ->findById($userId);

$user_data = array("$ref" => "User",
  "$id" : $user->getId(), // Or new \MongoId($userId)
  "$db" : "mydb");

$db->createQueryBuilder()
  ->update()
  ->field('id')->equals($gameId)
  ->field('players')->push($user_data)
  ->getQuery()
  ->execute();