2017-07-27 3 views
0



symfonyを初めて使用し、mongodbをデータベースとして使用してプロジェクトを作成しています。私は複数のレベルのデータベースを達成するために埋め込み文書を使用しています。以下は、私が使用しています2つの文書ファイルさ:
書類:埋め込みドキュメントのFindメソッドがsymfony mongoでnullを返す

namespace AppBundle\Document; 

/** 
* @MongoDB\Document() 
*/ 
class State 
{ 
    /** 
    * @MongoDB\Id() 
    */ 
    protected $id; 

    /** 
    * @MongoDB\Field(type="string") 
    */ 
    protected $name; 

    /** 
    * @MongoDB\Field(type="string") 
    */ 
    protected $code; 

    /** 
    * @MongoDB\EmbedMany(targetDocument="City") 
    */ 
    protected $cities = array(); 

    /** 
    * State constructor. 
    */ 
    public function __construct() 
    { 
     $this->cities = new ArrayCollection(); 
    } 

    /** 
    * @return mixed 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * @param mixed $id 
    */ 
    public function setId($id) 
    { 
     $this->id = $id; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * @param mixed $name 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getCode() 
    { 
     return $this->code; 
    } 

    /** 
    * @param mixed $code 
    */ 
    public function setCode($code) 
    { 
     $this->code = $code; 
    } 

    /** 
    * @return City[] 
    */ 
    public function getCities() 
    { 
     return $this->cities; 
    } 

    /** 
    * @param City $city 
    */ 
    public function addCities(City $city) 
    { 
     $this->cities[] = $city; 
    } 
} 

/** 
* @MongoDB\EmbeddedDocument() 
*/ 
class City 
{ 
    /** 
    * @MongoDB\Id 
    */ 
    protected $id; 

    /** 
    * @MongoDB\Field(type="string") 
    */ 
    protected $name; 

    /** 
    * @return mixed 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * @param mixed $id 
    */ 
    public function setId($id) 
    { 
     $this->id = $id; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * @param mixed $name 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 
    } 

} 

を、私はきちんとそれのデータベースとプレビューにデータを追加することができていますが、以下に表示される:

{ 
    "_id" : ObjectId("59783f79d6faef0dc13cc8ce"), 
    "name" : "New South Wales", 
    "code" : "NSW", 
    "cities" : [ 
     { 
      "_id" : ObjectId("59783f79d6faef0dc13cc8cf"), 
      "name" : "Sydney" 
     } 
    ] 
} 

そして今、私は取得していますがそれのidと方法 "()を見つける" を使用してデータ:

$city = $this->get('doctrine_mongodb') 
->getManager() 
->getRepository('AppBundle:City') 
->find("59783f79d6faef0dc13cc8cf"); 

ので、ここでの問題は次のとおりです。

私は$市にヌルを受け付けております。どのように都市の名前のような詳細を得ることができますか?

答えて

1

埋め込みドキュメントとしてCityをマッピングしました。したがって、親ドキュメントなしでは存在できません。取得できる唯一の方法はStateを取得してから$state->getCities()を反復処理することです。都市を照会する必要がある場合は、参照が必要です。Cityは、Mongoが独自のコレクションを持つファーストクラスの文書になります。

+0

したがって、ドキュメントマネージャを使用して、市の利用可能なIDから親「州」の詳細を見つけることは可能ですか? – AnkitJ

+0

はい、クエリビルダーを採用し、['$ elemMatch'](https://docs.mongodb.com/v3.0/reference/operator/query/elemMatch/)について読む必要があります。 – malarzm

関連する問題