ZD2 доктрина ODM И запросить все справочные данные

Я новичок в монго и доктрине ODM, но не ORM. У меня есть документ шатра и документ о проблемах. Я хотел бы, чтобы проблемы существовали как их собственная коллекция, но при сохранении выделенной области была возможность прикрепить проблему к выделенной области. Затем я хотел бы иметь возможность получить выделение по его идентификатору и получить документ о проблемах в виде данных в выделении.

/**
* Marquees
*
* @ODM\Document(collection="marquees", repositoryClass="MarqueesRepository")
*/
class Marquees {

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

/** @ODM\ReferenceMany(targetDocument="Problems", cascade="all") */
protected $problems;

public function addProblems(Problems $problem) {
$this->problems[] = $problem;
}
}

У меня также есть документ Проблемы

/**
* Problems
*
* @ODM\Document(collection="problems", repositoryClass="ProblemsRepository")
*/
class Problems {

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

/** @ODM\ReferenceOne(targetDocument="Marquees") */
protected $marquee;

/** @ODM\Field(type="string") */
protected $problem;

/** @ODM\Field(type="string") */
protected $description;

public function setProblem($problem) {
$this->problem = $problem;
}

}

Я создаю новую область с сохраненной проблемой, и это кажется правильным.

$marquee = new Marquees;
$this->odm->persist($marquee);
$class = new \Watch\IdeasFactory\Documents\Problems;
$class->setProblem($data->problems['problem']);
$marquee->addProblems($class);
var_dump($this->odm->flush());die();

> db.marquees.find().pretty()
{
"_id" : ObjectId("55008c95b5c14186118b4567"),
"problems" : [
DBRef("problems", ObjectId("55008c95b5c14186118b4568"))
]
}

> db.problems.find().pretty()
{ "_id" : ObjectId("55008c95b5c14186118b4568"), "problem" : "testing" }

Затем я хочу получить эту область по ее идентификатору и либо экспортировать ее, либо иметь гидратированный массив с обоими документами. Но тут у меня проблемы. Я могу получить выделение, используя QueryBuilder и установив гидратирование в false, но это просто дает мне массив без проблем, на которые ссылаются документы.

public function fetchById($id) {
$marquees = $this->createQueryBuilder('Marquees')
->field('id')->equals($id)
->hydrate(false)
->getQuery()
->getSingleResult();
}

array (
'_id' =>
MongoId::__set_state(array(
'$id' => '55008c95b5c14186118b4567',
)),
'problems' =>
array (
0 =>
array (
'$ref' => 'problems',
'$id' =>
MongoId::__set_state(array(
'$id' => '55008c95b5c14186118b4568',
)),
'$db' => 'watch_my_idea',
),
),
)

Если я удаляю гидрат (false) или просто использую find ($ id), я получаю обратно шатер, но каков лучший способ увлажнить шатер с проблемными документами? И это кажется очень быстрым, потому что тогда кажется, что любая ссылка на документ должна быть вручную обработана (потому что я не думаю, что odm сделает это рекурсивно), и поддержание этого является проблемой. Я читал о простом (истинном) методе, но я не должен использовать его правильно, потому что я получаю только обратные ссылки, даже после заправки.

Если я использую Prime (true), это также заставит меня повторить, если я не пропущу что-то еще.

$problems = $marquees->getProblems();
foreach($problems as $problem) {
var_dump($problem);die();
}

Я собираюсь вручную гидрировать все это или есть какой-то способ, который намного лучше, чем этот. Я следую стандартному маршруту 1 на 1 ресурс. Поэтому, хотя я хочу получить данные о проблемах с выделением с помощью find ($ id), я не буду обновлять проблему на выделенном маршруте. Вместо этого планируется использовать проблемный маршрут для обновления проблем. Это только для отображения данных на маршруте поиска ($ id). Любая помощь приветствуется

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]