主义(Mongo)坚持部分文件

时间:2011-07-30 03:38:14

标签: php mongodb doctrine

我有一个自定义类,它根据参数的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的存在将允许文档与数据库中当前的内容优雅地合并。但是,合并时缺少的任何字段都将从数据库中的文档中删除

有没有办法以这样的方式更新文档:只更新存在的字段(我猜是非空的)?

2 个答案:

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

如果有更好的建议,请随时回答......