Я использую Doctrine ODM, и у меня возникают проблемы с запросом встроенных документов по ссылочному документу.
Рассмотрим следующие документы:
<?php
/** @Document */
class TopCategory
{
/** EmbedMany(targetDocument="SubCategory") */
private $subCategories;
}
/** @EmbeddedDocument */
class SubCategory
{
/** ReferenceMany(targetDocument="Product") */
private $products;
}
/** @Document */
class Product
{
/** @String */
private $name;
}
Теперь мне интересно, как я могу найти TopCategory (или SubCategory) по продукту, я пробовал несколько разных способов добиться этого, один метод работает, но немного хакерский.
Первый способ не работает:
$category = $dm->createQueryBuilder('TopCategory')
->field('subCategories.products')->includesReferenceTo($someProduct)
->getQuery()->execute();
// ... gives Doctrine\ODM\MongoDB\MongoDBException: No mapping found for field 'subCategories.products' in class 'TopCategory'.'
Второй способ не работает:
$category = $dm->createQueryBuilder('SubCategory')
->field('products')->includesReferenceTo($someProduct)
->getQuery()->execute();
// ... returns null
В-третьих, рабочий обходной путь:
$category = $dm->createQueryBuilder('SubCategory')
->field('products.$id')->equals(new \MongoId($someProduct->getId()))
->getQuery()->execute();
// .. works, but seems hackish
Я использую последнюю версию GitHub и MognoDB v1.8.0. Что с этим делать?
ПРИМЕЧАНИЕ. Интересно, как Doctrine ODM позволяет напрямую возвращать встроенный документ.