Поле массива в MongoDB Объект возвращается пустым Doctrine, хотя он не пуст в БД - PullRequest
0 голосов
/ 20 мая 2019

Я работаю над приложением Symfony, которое использует MongoDB и Doctrine для соединения приложения с БД.Но теперь я добавил поле коллекции в один из документов, но содержимое этого поля всегда пусто, когда я запрашиваю его из базы данных через PHP, хотя оно не пусто, когда я возвращаю его непосредственно в оболочке MongoDB.

Более подробно: я добавил новое поле 'loginLast90Days' в существующий документ 'User' для хранения целых чисел времени в массиве:

<?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, я вижу новое значение в поле.Но в следующий раз, когда я добавлю значение к объекту, массив в 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();
    }

1 Ответ

0 голосов
/ 20 мая 2019

Попробуйте инициализировать свой loginLast90Days как массив,

инициализировать атрибут loginLast90Days в вашем конструкторе

public function __construct()
    {
        //Whatever you had here...
        $this->loginLast90Days = [];
    }
...