Мне нужна помощь в Doctrine ODM, в некоторых случаях гидрат не возвращает ожидаемые значения. У меня есть проект в качестве примера, и когда я запрашиваю коллекцию и все работает нормально с гидратом, это тот случай, который работает:
ProductsCollection:
<?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();
}
}
TagsCollection
<?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, только идентификатор, вот код:
<?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;
}
UsersGroupODM
<?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.