Доктрина (Монго) Постоянный Частичный Документ - PullRequest
0 голосов
/ 30 июля 2011

У меня есть собственный класс, который заполняет параметры действия контроллера, основываясь на подсказке параметра.Это хорошо работает для документов (используя общедоступные свойства и сеттеры).

Моя цель состоит в том, чтобы сделать контроллер простым:

function updateAction(Article $article)
{
    $dm = new DocumentManager(); // code elsewhere
    $dm->merge($article);
    $dm->flush();

    return $this->redirect('/article/' . $article->getId());
}

Проблема в том, что входные данные, предоставляющие поля для программного заполнения класса Article, не содержат all свойств класса Article (возможно, форма редактирования содержит только заголовок и контент, но игнорирует автора и т. д.).

Я надеялся, что наличие идентификатора позволит аккуратно объединить документ с тем, что в настоящее время находится в базе данных.Однако любые поля, которые отсутствуют во время слияния, будут удалены из документа в базе данных.

Есть ли способ обновить документ таким образом, чтобы обновлялись только те поля, которые присутствуют (я думаю, не нулевые)?

Ответы [ 2 ]

1 голос
/ 21 января 2013

Вместо того, чтобы дважды нажимать на БД - один раз для поиска и один раз для обновления, вы можете использовать запрос FIND_AND_UPDATE и делать все это за один шаг.

Подробнее см. На этой странице документации: http://docs.doctrine -project.org / projects / doctrine-mongodb-odm / en / latest / reference / find-and-update.html

0 голосов
/ 31 июля 2011

Кажется, что чистым способом было бы связать модель ПОСЛЕ извлечения ее из базы данных.Что-то вроде UpdateModel в ASP.NET MVC.

function updateAction($id)
{
    $dm = new DocumentManager(); // code elsewhere

    $article = $dm->getRepository('Article')->find($id);
    $this->updateModel($article);
    $dm->flush();

    return $this->redirect('/article/' . $article->getId());
}

Если есть предложения получше, смело отвечайте ...

...