嵌入式文档上的查找方法在 symfony 中返回 null mongo
Find method on embedded document is returning null in symfony mongo
我是 symfony 的新手,正在使用 mongodb 作为数据库创建项目。我正在使用嵌入式文档以实现多级数据库。下面是我正在使用的两个文档文件:
文档:
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"
}
]
}
现在我正在使用方法 "find()" 获取数据,其 id 为:
$city = $this->get('doctrine_mongodb')
->getManager()
->getRepository('AppBundle:City')
->find("59783f79d6faef0dc13cc8cf");
所以,这里的问题是:
I am receiving null in $city. How can I get details of city like name?
您已将 City
映射为嵌入文档,因此没有其父文档就无法存在。获得它的唯一方法是获取 State
,然后遍历 $state->getCities()
。如果您需要查询城市,您需要引用,这样 City
将成为第一个 class 文档,它有自己的集合 Mongo 可以扫描。
我是 symfony 的新手,正在使用 mongodb 作为数据库创建项目。我正在使用嵌入式文档以实现多级数据库。下面是我正在使用的两个文档文件:
文档:
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"
}
]
}
现在我正在使用方法 "find()" 获取数据,其 id 为:
$city = $this->get('doctrine_mongodb')
->getManager()
->getRepository('AppBundle:City')
->find("59783f79d6faef0dc13cc8cf");
所以,这里的问题是:
I am receiving null in $city. How can I get details of city like name?
您已将 City
映射为嵌入文档,因此没有其父文档就无法存在。获得它的唯一方法是获取 State
,然后遍历 $state->getCities()
。如果您需要查询城市,您需要引用,这样 City
将成为第一个 class 文档,它有自己的集合 Mongo 可以扫描。