简体   繁体   English

Doctrine ODM - 提供更新的字段

[英]Doctrine ODM - Updated fields provided

There is a way for automatically update all relevant fields?有没有办法自动更新所有相关字段? If I know all data send, I can do this:如果我知道所有数据发送,我可以这样做:

 return $this->dm->createQueryBuilder(Product::class)
                ->findAndUpdate()
                ->field('_id')->equals($data['id'])
                ->field('author_id')->equals($id)
                ->field('known_fields')->set($data['known_fields'])
                ->getQuery()
                ->execute();

but if $data change, for example:但如果 $data 发生变化,例如:

$data['known_field' => '...', 'unknown_field' => '...']

to solve the problem I do this,为了解决我这样做的问题,

public function update(String $id, $data)
    {
        try {

            $query = $this->dm->createQueryBuilder(Product::class)
                ->findAndUpdate()
                ->field('_id')->equals($data['id'])
                ->field('author_id')->equals($id);

                $this->updateFields($query, $data)
                    ->getQuery()
                    ->execute();

        } catch (MongoDBException $e) {
            return new JsonResponse(['message' => $e->getMessage()]);
        }
    }

    public function updateFields(Builder $dm, $data)
    {
        unset($data['id'], $data['author_id']);
        foreach ($data as $key => $field) {
            $dm->field($key)->set($field);
        }

        return $dm;
    }

but there is not an another beautiful solution?但是没有另一个漂亮的解决方案吗? maybe like this:也许是这样的:

 return $this->dm->createQueryBuilder(Product::class)
                ->findAndUpdate()
                ->field('_id')->equals($data['id'])
                ->field('author_id')->equals($id)
                ->sets(['field' => 'value', 'field_2' => 'value_2', ...])
                ->getQuery()
                ->execute();

There is no way to set several fields to update in the ODM.无法在 ODM 中设置多个要更新的字段。 Writing your own loop is correct approach.编写自己的循环是正确的方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM