PHP / MongoDB - Doctrine ODM Hydrate в некоторых случаях другие нет - PullRequest
0 голосов
/ 10 октября 2019

Мне нужна помощь в 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.

...