学说/Symfony如何使用数组中的特定数据更新实体



我环顾四周,没有运气。我的情况是,我有一些大的表 60列,该列在学说实体中表示。在Fosrest上工作,我想实现的目标是我想发送一个带有特定数据的JSON,例如

[phone] => new_phone
[name] => new_name
[id] => 1

就像我说的那样,该实体包含60多列,例如地址,图片,类别等...

和电话,名称和ID并不是我每次都想更改的内容,但我想每次都更改一些列。因此,在某个时候,我可能想更新电话并命名其他时间,我想第三次更改类别,我想更改类别,照片和地址所以有这样的东西吗?

$entity->update($parameters);

$参数如前所述动态更改。PS。我知道我可以用

之类的东西构建一个很长的功能
if(isset($parameters['name']){
     $entity->setName($parameters['name']);
}

但是有60个IF这听起来像是愚蠢的,有人还有其他方法吗?谢谢

1)如果参数是以属性命名的(这里有下划线注释),则可以执行此操作

use DoctrineCommonUtilInflector;
// ...
public function setParameters($params) {
    foreach ($params as $k => $p) {
        $key = Inflector::camelize($k);
        if (property_exists($this, $key)) {
            $this->$key = $p;
        }
    }
    return $this;
}

2)播放器的同一件事

use DoctrineCommonUtilInflector;
// ...
public function setParameters($params) {
    foreach ($params as $k => $p) {
        $key = Inflector::camelize($k);
        if (property_exists($this, $key)) {
            $this->{'set'.ucfirst($key)}($p); // ucfirst() is not required but I think it's cleaner
        }
    }
    return $this;
}

3)如果它的名称不是同一名,则可以执行此操作:

public function setParameters($params) {
    foreach ($params as $k => $p) {
        switch $k {
            case 'phone':
                $this->phoneNumber = $p;
                break;
            // ...
        }
    }
    return $this;
}

编辑:最佳方法是第二名,但您应该定义白名单或黑名单,以避免用户更新您不希望他的东西。

相关内容

  • 没有找到相关文章

最新更新