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

2024-05-06

我环顾四周太久了,但没有运气。我的情况是,我有一个有点大的表 +60 列,在 Doctrine Entity 中表示。在 FosREST 上工作,我想要实现的是,我想发送带有特定数据的 JSON,例如

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

正如我所说,该实体包含 60 多个列,例如地址、图片、类别等......

电话、姓名和 ID 不是我每次都想更改的内容,但我每次都想更改一些列。 因此,有时我可能想更新电话和名称,其他时候我想更改类别,第三次我想更改类别、照片和地址 那么有这样的事情吗?

$entity->update($parameters);

其中 $parameters 如前所述动态更改。 附:我知道我可以用类似的东西构建一个很长的函数

if(isset($parameters['name']){
     $entity->setName($parameters['name']);
}

但是对于 60 个 if,这听起来很愚蠢,有人还有其他方法吗? 谢谢


1)如果参数以属性命名(这里用下划线注释),可以这样做

use Doctrine\Common\Util\Inflector;
// ...

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 Doctrine\Common\Util\Inflector;
// ...

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Doctrine/Symfony 如何使用数组中的特定数据更新实体 的相关文章

随机推荐

  • 如何禁用 Spring 日志记录 DEBUG 消息?

    我正在开发一个简单的桌面应用程序 不是网络应用程序 这是我的log4j properties log4j rootCategory INFO stdout log4j appender stdout org apache log4j Con
  • 所有任务完成后继续任务

    在某些类中 我想使用 Task 异步加载 2 个集合并停止 busyindicator 我尝试这样的事情 var uiScheduler TaskScheduler FromCurrentSynchronizationContext Wai
  • 将块传递给 AFNetworking 方法?

    void getDataFromServer NSMutableDictionary dict NSURL url NSURL URLWithString NSString stringWithFormat doSomething Main
  • 如何快速从字符串中删除特定字符或单词?

    var myString 43321 This is example hahaha 4356 13 我想要的结果是 var resultString This is example 换句话说 我想删除某些单词和数字 这怎么可能 我已经进行了
  • Android 客户端中经过身份验证的 Cloud Endpoint 间歇性失败

    我有一个生产中的应用程序 在调用经过身份验证的云端点时收到大量强制 关闭 最能说明问题的是 java lang IllegalArgumentException 服务未注册 com google android gms internal e
  • dependency walker 在正确运行的系统上给我错误

    我的系统上缺少 dll 我有以下消息 无法加载文件或程序集 mydll dll 或其依赖项之一 当然 mydll 存在于此 它很可能是它所依赖的另一个 dll 我下载了 dependency walker 来检查它可能是什么 我首先在另一个
  • 获取带有注释的所有类并将它们添加到 android 中的 hashMap

    我不确定这是否可能 但我基本上希望能够轻松地将新项目添加到列表中 只需添加带有特殊注释的类即可 我能想到的唯一例子就是我目前正在做的事情 用户可以完成很多 挑战 目前我的应用程序中有一个用于 挑战 的包 我希望能够在该包中创建一个新类 给它
  • 来自函数参数的动态 Typescript 对象属性

    我有一个函数 它接受一个n参数的数量 并生成一个新对象 其中包含参数到唯一哈希的键值映射 Typescript 有没有办法从函数的参数动态推断返回对象的键 Example 生成字典的CreateActionType函数 function c
  • 使用 qtp 功能单击特定链接

    我想通过创建一个在操作中调用的函数来自动执行 Flipkart 的登录过程 Function Website this is the function Systemutil Run iexplore exe http www flipkar
  • VBA写入Word,更改字体格式

    我正在 Excel 中编写 VBA 脚本 以将基于某些表格的文本输出到 Word 文档 在大多数情况下 一切都很顺利 我在 stackoverflow 的帮助下自学 我有一个相当长的代码 因此将其全部复制到这里会很困难 我将尝试展示相关部分
  • 时间序列数据 - 如何[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在考虑进行一项为期一个月的研究 受试者记录他的饮酒量和排尿频率 我想让受试者每天记录这些活动 这样我就有一个月的数据 每天的排尿次
  • Kubernetes Pod 动态环境变量

    我需要能够将自定义环境变量分配给 Pod 的每个副本 一个变量应该是一些随机的 uuid 另一个唯一的数字 怎么可能实现呢 我更愿意继续使用带有副本的 部署 如果这不是开箱即用的 如何通过自定义复制控制器 控制器管理器来实现 有没有可用的钩
  • 使用 SESSION_CONTEXT 的实体框架核心行级安全性

    我正在使用 ASP NET Core 和 Entity Framework 7 Core 编写一个使用行级安全性的多租户应用程序 由于我的数据库托管在 Microsoft SQL Server 上 因此我使用了this https msdn
  • Facebook 点赞按钮点赞错误的网址

    如果我尝试制作一个 facebook like 按钮来喜欢以下网址 http go style co uk nggallery page 7029 image 35 该按钮喜欢以下网址 http go style co uk test ga
  • 如何以编程方式创建证书签名请求 (CSR)?

    如何用C实现呢 openssl req new key cert key out cert csr openssl x509 req in cert csr CA rootCA crt CAkey rootCA key CAcreatese
  • Monolog Logger 在每个日志消息的末尾输出空数组

    我的记录器对象在每行末尾输出空数组 例如 2017 08 17 12 26 02 import log INFO checkForDuplicates is processing 2017 08 17 12 26 04 import log
  • 如何使用 JavaFX 中的 JCSG 库将 MeshView 转换为 CSG 对象

    我正在使用 JavaFX 的 JCSG 库 我有一些MeshView我想将它们转换成的对象CSG对象 有办法实现吗 最简单的方法是组合javafx scene shape Mesh对象与 CSG 对象 前提是您有TriangleMesh正在
  • BlackBerry - 带居中位图的 ButtonField

    我有一个从 ButtonField 扩展的类 class BitmapButtonField extends ButtonField private Bitmap bitmap private int buttonWidth private
  • XML 序列化基类列表

    我有课A从类继承B 我有一个班级名单B其中包含A and B items List b myList new List b myList Add new A 当我尝试使用序列化此列表时XmlSerializable 抛出异常 如果我将列表定
  • Doctrine/Symfony 如何使用数组中的特定数据更新实体

    我环顾四周太久了 但没有运气 我的情况是 我有一个有点大的表 60 列 在 Doctrine Entity 中表示 在 FosREST 上工作 我想要实现的是 我想发送带有特定数据的 JSON 例如 phone gt new phone n