我对 MongoDB 文档有以下定义(为简洁起见,我删除了该类的部分内容):
// src/Acme/UserBundle/Document/User.php
namespace Acme\UserBundle\Document
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\EquatableInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique as MongoDBUnique;
/**
* @MongoDB\Document()
* @MongoDBUnique(fields="email", message="This email is already registered")
*/
class User implements UserInterface, EquatableInterface
{
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\String
* @Assert\Email(checkMX=true)
*/
protected $email;
/**
* @MongoDB\Collection
*/
protected $languages = array();
}
接下来,我使用以下方法生成 setter 和 getter:
php app/console doctrine:mongodb:generate:documents UserBundle
我像往常一样使用 User 类,一切正常,我可以存储正确存储在 mongodb 中的用户实例。
使用 mongodb 的控制台查询,我可以看到对象是如何存储的以及languages
存储数组的方式:
> db.User.find()
{ "_id" : ObjectId("51c2da8d8b4d24315e9ec3d2"), "email" : "test@test.com", "languages" : [ "en", "fr" ] }
但是当我尝试检索数据时:
$dm = $this->get('doctrine_mongodb')->getManager();
$user = $dm->getRepository('UserBundle:User')->findOneByEmail('test@test.com');
$user->getEmail()
正确返回电子邮件,但$user->getLanguages()
始终返回一个空数组。
编辑:
我设法使用 CLI 命令运行查询app/console
:
$dm = $this->getContainer()->get('doctrine_mongodb')->getManager();
$user = $dm
->getRepository('UserBundle:User')
->findOneByEmail('test@test.com');
print_r($user->getLanguages());
命令的输出print_r
是正确的:
Array
(
[0] => en
[1] => fr
[2] => pt
[3] => es
)
编辑2:
之后我再次尝试了该应用程序,它工作正常。我不知道为什么。