我正在开发一个Symfony应用程序,该应用程序使用MongoDB和Doctrine将应用程序与数据库连接。 但是现在我向其中一个文档中添加了一个集合字段,但是当我通过PHP从数据库中查询该字段时,该字段的内容始终为空,尽管当我直接在MongoDB Shell中将其返回时,该字段的内容并不为空。
更详细地: 我在现有文档“用户”中添加了一个新字段“ loginLast90Days”,以将时间整数存储在数组中:
<?php
namespace AppBundle\Document;
use Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique as MongoDBUnique;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @MongoDB\Document(collection="users")
* @MongoDBUnique(fields="{id, email}")
*/
class User
{
// ...
/**
* @MongoDB\Field(type="collection")
*/
protected $loginLast90Days;
// ...
/**
* Set loginLast90Days
*
* @param collection $loginLast90Days
* @return $this
*/
public function setLoginLast90Days($loginLast90Days)
{
$this->loginLast90Days = $loginLast90Days;
return $this;
}
/**
* Get loginLast90Days
*
* @return collection $loginLast90Days
*/
public function getLoginLast90Days()
{
return $this->loginLast90Days;
}
public function addLoginLast90Days($login)
{
$this->loginLast90Days[] = $login;
return $this;
}
public function removeLoginLast90Days($login)
{
$this->loginLast90Days->removeElement($login);
return $this;
}
// ...
}
现在我可以将日期整数添加到其中一个用户对象:
$dm = $this->get('doctrine_mongodb');
$user = $dm->getRepository('AppBundle:User')->findOneBy(array('gmail' => $email));
$user->addLoginLast90Days(time());
$dm = $this->get('doctrine_mongodb')->getManager();
$dm->persist($user);
$dm->flush();
现在,当我使用Mongo Shell找到对象时,可以在字段中看到新值。 但是,下次我向对象添加值时,PHP中的数组为空,尽管我可以在数据库中看到它不应为空。
有人知道我的错误在哪里吗?我忘记将字段正确映射到数据库了吗?
非常感谢!
编辑: 这是用户文档的构造函数:
public function __construct($customerId, $refreshToken, $canManageCustomers)
{
$this->customerId = $customerId;
$this->refreshToken = $refreshToken;
$this->canManageCustomers = $canManageCustomers;
$this->isActive = true;
$this->accountLevel = "basic";
$this->isRegistered = false;
$this->createdAt = new \MongoDate();
}
答案 0 :(得分:0)
尝试将您的loginLast90Days初始化为数组,
在构造函数中初始化属性loginLast90Days
public function __construct()
{
//Whatever you had here...
$this->loginLast90Days = [];
}