2016-11-14 5 views
0

、私のようなユーザー一部の文書、下記のを持っているんSymfony3リポジトリに作成されたのMongoDBドキュメントのIDを取得します。ユーザリポジトリを介してユーザ文書を送信する。 createQueryBuilder()周りの作業、私はこの方法で構築されています。むしろtrueを返すよりも私<strong>Symfony3</strong>プロジェクトで

public function insert($email, $firstName, $lastName) 
{ 
    $data = array('email' => $email, 
     'firstName' => $firstName, 
     'lastName' => $lastName, 
    ); 

    /* Create query */ 

    $query = $this->createQueryBuilder(); 

    /* Add Data */ 

    $query 
     ->insert() 
     ->setNewObj($data); 

    /* Return */ 

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

    return true; 
} 

を、私はちょうどを作成した文書のIDを返すしたいと思います。

の答えを探してい

、私は、コードのこの部分を見つけた:

$this->getDocumentManager()->getConnection()->lastInsertId 

残念ながら、私が探しています何を返していません。あなたの助けを

object(MongoDB)[307] 
    public 'w' => int 1 
    public 'wtimeout' => int 10000 

ありがとう!

編集:ここでは

は受け入れ答えで行われた提案と更新されたコードです:

public function insert($email, $firstName, $lastName) 
{ 
    $id = new MongoId(); 

    $data = array(
     '_id' => $id, 
     'email' => $email, 
     'firstName' => $firstName, 
     'lastName' => $lastName, 
    ); 

    /* Create query */ 

    $query = $this->createQueryBuilder(); 

    /* Add Data */ 

    $query 
     ->insert() 
     ->setNewObj($data); 

    /* Return */ 

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

    return $id->__toString(); 
} 

答えて

1

あなたの問題を解決する最も簡単な方法は、new \MongoId()を呼び出すことにより、識別子の先行投資を生成することで、それを追加します(_idキーの下に)挿入しているデータと既知の値を返します。また、明示的に識別子が設定されていない文書を挿入しているときに、MongoDBの基本ドライバが舞台裏で行っているのです(this doc exampleを参照)

0

MongoDBドライバは渡される配列にIDを書き込みますクエリオブジェクトの構造のために表示されません。これは必ずしも(ODM 2.0以降で使用される)新しいMongoDBのドライバ以来、将来のバージョンでは動作しないこと、しかし

$query = $queryBuider->getQuery(); 
$query->execute(); 

$id = $query->getQuery['newObj']['_id']; 

注:あなたはgetQuery()によって返されたクエリオブジェクトからそれを得ることができますこの機能はありません。

関連する問題