Как сохранить документ в другом документе, с помощью Doctrine ODM? - PullRequest
1 голос
/ 27 ноября 2011

Как сохранить документ внутри другого документа с помощью Doctrine ODM?

Я не вижу типа Array или Json в документации.

Я хотел бы иметь возможность сделать что-то вроде этого:

class Post {

    /**
     * @MongoDB\String
     */
    protected $body;

    /**
     * @MongoDB\Array
     */
    protected $comments = array();

}

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

Ответы [ 3 ]

2 голосов
/ 28 ноября 2011
/**
 * @MongoDB\Document
 */
class Post
{
    /**
     * @MongoDB\Id
     */
    private $id;

    /**
     * @MongoDB\String
     */
    private $body;

    /**
     * @MongoDB\EmbedMany(targetDocument="Comment")
     */
    private $comments;

    public function __construct()
    {
        $this->comments = new ArrayCollection();
    }
}

/**
 * @MongoDB\EmbeddedDocument
 */
class Comment
{
    /**
     * @MongoDB\String
     */
    private $body;
}

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

0 голосов
/ 06 февраля 2012

В моем __construct () мне нужно

new \Doctrine\Common\Collections\ArrayCollection();

, где у вас просто есть

new ArrayCollection();
0 голосов
/ 28 ноября 2011
...