Has*_*san 10 php doctrine mongodb symfony
我试图从MongoDB中检索对象,但我面临一个问题,即它返回基类型的元素而不是子元素而且它引起了麻烦,我发现它以某种方式依赖于属性的值.
/**
* @MongoDB\Document(
* collection="zoo",
* repositoryClass="ZooRepository",
* )
*/
class Zoo
{
/**
* @MongoDB\ReferenceMany(targetDocument="Animal", inversedBy="zoo", strategy="addToSet")
* @var \Doctrine\Common\Collections\ArrayCollection
*/
protected $animals;
/**
* @return mixed
*/
public function getAnimals()
{
return $this->animals->toArray();
}
//Some more code
}
/**
* @MongoDB\Document(
* repositoryClass="AnimalRepository",
* collection="animals"
* )
* @MongoDB\InheritanceType("SINGLE_COLLECTION")
* @MongoDB\DiscriminatorField("discriminator")
* @MongoDB\DiscriminatorMap({
* "animal"="Animal",
* "birds"="Bird",
* "mamals"="Mamals"})
*/
class Animal
{
/**
* @MongoDB\ReferenceMany(targetDocument="Location", mappedBy="animals", simple=true, cascade={"persist"})
*
* @Assert\Count(min="0", max="1")
*/
protected $locations;
}
/**
* @MongoDB\Document(repositoryClass="AnimalRepository")
*/
class Bird extends Animal
{
}
/**
* @MongoDB\Document(repositoryClass="AnimalRepository")
*/
class Mamals extends Animal
{
}
Run Code Online (Sandbox Code Playgroud)
问题是:当我从ZooHandler调用getAnimals()时,它返回Animal类型的对象.我想要的是Mamals或Bird的类型.奇怪的是,如果我在动物 - >位置有一个元素然后我把它弄好了(Mamal/Bird),如果它没有元素那么我得到了基本类型.
如果我直接从AnimalHandler中的AnimalRepository获取所有动物的列表,我会相应地得到Mamals/Bird的对象.
编辑:Zoo对象
> db.zoo.findOne()
{
"_id" : ObjectId("5822bd23085f753b5a5a2408"),
"name" : "Zoo 2",
"active" : true,
"archived" : false,
"animals" : [
DBRef("animals", ObjectId("556cc7adec045b1a0c8b4567"),{ "$db": "tester", "discriminator": "Test\\Bundle\\Core\\Document\\Animal" }),
DBRef("animals", ObjectId("556cb3b0ec045bbf068b4582"),{ "$db": "tester", "discriminator": "Test\\Bundle\\Core\\Document\\Animal" })
]
}
Run Code Online (Sandbox Code Playgroud)
肯定还有一些未显示的属性,因为它们无关紧要.
归档时间: |
|
查看次数: |
555 次 |
最近记录: |