Документы доктрины не могут быть загружены, если стратегия ID НЕТ - PullRequest
0 голосов
/ 16 апреля 2019

Я использую Doctrine с MongoDB.Обычно мне нет дела до идентификаторов, но в одном случае мне нужен идентификатор до сброса, чтобы избежать ненужной поездки туда и обратно.Поэтому я добавил стратегию идентификатора «NONE» и установил идентификатор в конструкторе. Но после этого я не могу загрузить документ по его идентификатору.

Код для загрузки документа:

/* @var $userRepo DocumentRepository */
$userRepo = $managerRegistry->getRepository(User::class);
$qb = $userRepo->createQueryBuilder();
$qb->field('id')->in(['5cb6377ae0b68801bc3b1771']);
$user = $qb->getQuery()->execute()->getSingleResult();
var_dump($user instanceof User);

/* @var $userRepo DocumentRepository */
$userRepo = $managerRegistry->getRepository(User::class);
$users = $userRepo->findBy(['id' => '5cb6377ae0b68801bc3b1771']);
var_dump(count($users) === 1);

/* @var $userRepo DocumentRepository */
$userRepo = $managerRegistry->getRepository(User::class);
$user = $userRepo->find('5cb6377ae0b68801bc3b1771');
var_dump($user instanceof User);

(На самом деле false, false, false - ожидаемый true,верно, верно)

Документ:

/**
 * @ODM\Document
 */
class User
{

    /**
     * @ODM\Id(strategy="NONE")
     */
    protected $id;

    public function __construct()
    {
        $this->id = new \MongoId();
    }

    ...
}

1 Ответ

0 голосов
/ 17 апреля 2019

Это происходит потому, что вы используете строку в вызовах find.Вам нужно использовать MongoId, так как это ваш идентификатор.Итак:

/* @var $userRepo DocumentRepository */
$userRepo = $managerRegistry->getRepository(User::class);
$user = $userRepo->find(new \MongoId('5cb6377ae0b68801bc3b1771'));
...