首页 > 解决方案 > PHP/MongoDB - Doctrine ODM Hydrate 在某些情况下其他不是

问题描述

我在 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。

标签: mongodbphp-7.2doctrine-odmmezzio

解决方案


推荐阅读