2011-07-30 30 views
0

我有一个自定义类,它根据参数的typehint填充控制器的动作参数。这适用于文档(使用公共属性和setter)。学说(Mongo)持续部分文档

我的目标是使控制器简单:

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

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

的问题是,在输入供应领域以编程方式填充Article类不包含Article类的属性所有(也许编辑表单只包含标题和内容,但是无视作者等)。

我一直希望ID的存在将允许文档与数据库中当前正在合并。但是,在合并时丢失的任何字段将从数据库中的文档中删除

有没有更新文件的方式,只有存在的字段(非空,我猜)更新?

回答

0

看起来干净的方法是将模型从数据库中检索后绑定到模型上。一些沿着ASP.NET MVC的UpdateModel的行。

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()); 
} 

如果存在什么更好的建议,请随时回答...

1

而不是击中分贝两次 - 一次是发现,一旦进行更新,你可以使用一个FIND_AND_UPDATE查询。并且一步完成。

有关详细信息,请参阅本文档页:http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/find-and-update.html

+0

这将是一个很好的解决方案,如果我将被装载在从蒙戈控制器的文章。这是基于HTTP请求预先填充控制器动作参数的框架的一部分(因此,在您访问控制器时已经获取了该文章)。 – efritz