我有一个自定义类,它根据参数的typehint填充控制器的动作参数。这适用于文档(使用公共属性和setter)。
我的目标是让控制器变得简单:
function updateAction(Article $article)
{
$dm = new DocumentManager(); // code elsewhere
$dm->merge($article);
$dm->flush();
return $this->redirect('/article/' . $article->getId());
}
问题是提供字段以编程方式填充Article类的输入不包含Article类属性的所有(可能编辑表单只包含Title和Content,但忽略作者等)。
我希望ID的存在将允许文档与数据库中当前的内容优雅地合并。但是,合并时缺少的任何字段都将从数据库中的文档中删除。
有没有办法以这样的方式更新文档:只更新存在的字段(我猜是非空的)?
答案 0 :(得分:1)
而不是两次点击数据库 - 一次用于查找,一次用于更新,您可以使用FIND_AND_UPDATE
查询。并且只需一步完成。
有关详细信息,请参阅此文档页面:http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/find-and-update.html
答案 1 :(得分: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());
}
如果有更好的建议,请随时回答......