Доктрина 2 MongoDB получает дочерние записи объекта - PullRequest
2 голосов
/ 20 марта 2012

Я использую doctrine / mongodb-odm-bundle, и у меня возникла проблема: я не могу получить ссылочные строки из документа (или я просто не знаю, как это сделать ..) У меня есть 2 документа с одним-для многих ссылка так: сначала

/**
 * @MongoDB\Document(collection="categories")
 */
class Category
{
    /**
     * @var integer $id
     *
     * @MongoDB\Id(strategy="auto")
     */
    private $id;

    /**
     * @var string $name
     *
     * @MongoDB\String
     * @Assert\NotBlank()
     * @Assert\MinLength(3)
     */
    private $name;

    /**
     * @MongoDB\ReferenceMany(targetDocument="Application\Bundle\DefaultBundle\Document\Wallpaper", mappedBy="category")
     */
    private $files;
.................
    /**
     * Set files
     *
     * @param array $files
     */
    public function setFiles($files)
    {
        $this->files = $files;
    }

    /**
     * Get files
     *
     * @return array $files
     */
    public function getFiles()
    {
        return $this->files;
    }

.................секунда

/**
 * @MongoDB\Document(collection="wallpapers")
 */
class Wallpaper
{
    /**
     * @var string $id
     * @MongoDB\Id(strategy="auto")
     */
    protected $id;
    /**
     * @MongoDB\ReferenceOne(targetDocument="Application\Bundle\DefaultBundle\Document\Category", inversedBy="files")
     */
    private $category;

    /**
     * Get category
     *
     * @return Application\Bundle\DefaultBundle\Document\Category $category
     */
    public function getCategory()
    {
        return $this->category;
    }

    /**
     * Set category
     *
     * @param Application\Bundle\DefaultBundle\Document\Category $category
     */
    public function setCategory($category)
    {
        $this->category = $category;
    }

}

вот код от контроллера:

$category = $dm->getRepository('ApplicationDefaultBundle:Category')->findOneBy(...);
$wallpapers = $category->getFiles();

$ обои и файлы $ document-> равны NULL.Как я могу получить записи, связанные с категорией?и как я могу получить категорию от конкретного объекта обоев?есть ли аналог "JOIN", как в стандартном ORM?

Ответы [ 3 ]

2 голосов
/ 07 июля 2012

Вы уверены, что DoctrineORM удалили ваш проект?У меня была эта проблема.Я удалил свой проект DoctrineORM, и он сработал.

2 голосов
/ 21 марта 2012

Отображение выглядит правильно. Я думаю, что ваша проблема может быть с запросом. Я также проверил бы, что коллекция обоев имеет правильные документы с полем категории, заполненным правильными данными объекта DBRef.

$category = $dm->getRepository('Application\Bundle\DefaultBundle\Document\Wallpaper')->findOneById($id);
$wallpapers = $category->getFiles(); // Will return a cursor to the wallpaper objects
foreach ($wallpapers as $wallpaper) {
     do stuff
}

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

0 голосов
/ 22 марта 2012

Нет такого «соединения», как в SQL, ODM будет делать отдельные запросы и объединять их в объект. По умолчанию доктрина делает это лениво при доступе к этой части.

Как сказал Джейми, запрос и данные являются ключевыми элементами, помогающими здесь.

...