我在 Doctrine ODM 中需要一些帮助,在某些情况下,水合物不会返回预期值。我以项目为例,当我查询一个集合并且所有的水合物都可以正常工作时,情况就是这样:
产品集合:
<?php
namespace MongodbManager\Documents;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use Doctrine\Common\Collections\ArrayCollection;
/** @ODM\Document */
class ProductsODM
{
/** @ODM\Id */
public $id;
/** @ODM\Field(type="string") */
public $name;
/** @ODM\Field(type="float") */
public $price;
/** @ODM\Field(type="date") */
public $date;
/** @ODM\EmbedMany(targetDocument=CategoriesODM::class) */
public $categories;
/** @ODM\ReferenceMany(targetDocument=TagsODM::class, storeAs="id") */
public $tags;
/** @ODM\ReferenceOne(targetDocument=TagsODM::class, storeAs="id") */
public $tagsPrimary;
public function __construct()
{
$this->categories = new ArrayCollection();
}
}
标签收藏
<?php
namespace MongodbManager\Documents;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/** @ODM\Document */
class TagsODM
{
/** @ODM\Id */
public $id;
/** @ODM\Field(type="string") */
public $name;
}
查询(工作!)
$this->dm->createQueryBuilder(ProductsODM::class)->hydrate(true)->getQuery()->execute();
返回(内容):
{
"id": "5d9e23b32b251b2fc7438d14",
"name": "Martini 1570644915",
"price": 5.99,
"date": {
"date": "2019-10-09 15:15:15.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"categories": [
{
"id": "5d9e23b32b251b2fc7438d15",
"name": "bar"
},
{
"id": "5d9e23b32b251b2fc7438d16",
"name": "night"
}
],
"tags": [
{
"id": "5d9dde11982e830950453618",
"name": "COMIDA"
},
{
"id": "5d9dde11982e830950453619",
"name": "BEBIDA"
}
],
"tagsPrimary": {
"id": "5d9dde11982e830950453618",
"name": "COMIDA"
}
}
如您所见,结果带有标签值。
这是问题:在我查询文档时的UsersODM中,结果中不包括UsersGrousODM的值,只是id,这是代码:
<?php
namespace MongodbManager\Documents;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/** @ODM\Document */
class UsersODM
{
/** @ODM\Id */
public $id;
/** @ODM\Field(type="string") */
public $users_login_code;
/** @ODM\Field(type="string") */
public $users_username;
/** @ODM\Field(type="string") */
public $users_password;
/** @ODM\Field(type="string") */
public $users_status;
/** @ODM\Field(type="date") */
public $users_update_date;
/** @ODM\ReferenceOne(targetDocument=UsersGroupODM::class, storeAs="id") **/
public $users_group_id;
}
用户组ODM
<?php
namespace MongodbManager\Documents;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/** @ODM\Document */
class UsersGroupODM
{
/** @ODM\Id */
public $id;
/** @ODM\Field(type="string") */
public $users_group_name;
/** @ODM\Field(type="string") */
public $users_group_status;
}
查询:
$this->dm->createQueryBuilder(UsersODM::class)hydrate(true)->getQuery()->execute();
返回:
{
"id": "5d9e2b0991055769a44078c6",
"users_login_code": null,
"users_username": "webmaster",
"users_password": "d68b87ecdf82164583816f1306f4c342ba57ad3e......",
"users_status": "active",
"users_update_date": {
"date": "2019-10-09 15:46:33.000000",
"timezone_type": 3,
"timezone": "America/Sao_Paulo"
},
"users_group_id": {
"id": "5d9e289358063a6594142cbc"
},
"users_info": null
}
users_group_id 不包括字段 users_group_name 和 users_group_status。