Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 代码发布 › Easywoole框架实战_封装批量更新数据ORM

Easywoole框架实战_封装批量更新数据ORM

Eswlnk的头像
Eswlnk
2022-05-01 1:16:48
Easywoole框架实战_封装批量更新数据ORM-Eswlnk Blog
智能摘要 AI
本文介绍了作者在使用EasySwoole框架开发项目时,因框架未提供批量更新功能而自行扩展的方法。EasySwoole是一个基于Swoole的高性能PHP框架,支持HTTP、TCP和UDP协议的混合监控。作者通过修改ORM包中的`AbstractModel.php`文件,添加了`upDataInfo`等方法,实现了批量更新功能。该方法通过构建动态SQL语句,根据指定字段批量更新数据库记录。尽管功能已实现,但作者仍建议官方在后续版本中加入此功能,以减少用户手动修改代码的需求。

最近在承接一个项目时用到了Easywoole框架,为此特意学习了解了一下有关该框架的信息。它是一个基于 swoole 服务器开发的内存驻留分布式 PHP 框架。该框架为 Api 设计的,摆脱了传统 PHP 运行模式在进程调用和文件加载中造成的性能损失。Easysoole 高度封装了 swoole 服务器,并且仍然保持了 swoole 服务器的原始特性。它同时支持 HTTP、自定义 TCP 和 UDP 协议的混合监控,允许开发人员以最低的学习成本和精力编写多进程、异步和高可用的应用程序服务。

Easywoole框架实战_封装批量更新数据ORM-Eswlnk Blog
框架

前言

在写一个项目时用了easyswoole框架,需要用到批量更新方法,但是easyswoole没有去实现方法,只能自己封装了。

实现代码

找到ORM包的src/AbstractModel.php文件,在文件最后添加上下面代码就可以实现了。

    /**
     * 批量更新数据
     * 根据$field 字段 更新数据
     **/
    public function upDataInfo($data, $field = null, $where = [])
    {
        //主键没有定义自动寻找主键
        if (is_null($field)) {
            $field = $this->schemaInfo()->getPkFiledName();
            if (empty($field)) {
                throw new Exception('upDataInfo needs primaryKey for model ');
            }
        }
        //语句组装
        $updates = $this->parseUpdate($data, $field);
        $where = $this->parseParams($where);
        $fields_c = array_map(function ($v) use ($field) {
            return $v["$field"];
        }, $data);
        $fields = implode(',', array_map(function ($value) {
            return "'" . $value . "'";
        }, $fields_c));
        $sql = sprintf("UPDATE `%s` SET %s WHERE `%s` IN (%s) %s", $this->tableName, $updates, $field, $fields, $where);
        return $sql;
    }

    /**
     * Function parseUpdate
     * 将二维数组转换成CASE WHEN THEN的批量更新条件
     */
    function parseUpdate($data, $field)
    {
        $sql = '';
        $keys = array_keys(current($data));
        foreach ($keys as $column) {

            $sql .= sprintf("`%s` = CASE `%s` \n", $column, $field);
            foreach ($data as $line) {
                $sql .= sprintf("WHEN '%s' THEN '%s' \n", $line[$field], $line[$column]);
            }
            $sql .= "END,";
        }
        return rtrim($sql, ',');
    }

    /**
     * Function parseParams
     * 解析where条件
     */
    function parseParams($params)
    {
        $where = [];
        foreach ($params as $key => $value) {
            $where[] = sprintf("`%s` = '%s'", $key, $value);
        }
        return $where ? ' AND ' . implode(' AND ', $where) : '';
    }

使用

$model = new UploadModel();
        echo $model->upDataInfo([
            ['id' => 1, 'name' => '教书先生', 'email' => '599928887@qq.com'],
            ['id' => 2, 'name' => '教书先生2', 'email' => '599928887@qq.com']
        ], 'id');

运行结果

UPDATE `upload_list` SET `id` = CASE `id` 
WHEN '1' THEN '1' 
WHEN '2' THEN '2' 
END,`name` = CASE `id` 
WHEN '1' THEN '教书先生' 
WHEN '2' THEN '教书先生2' 
END,`email` = CASE `id` 
WHEN '1' THEN '599928887@qq.com' 
WHEN '2' THEN '599928887@qq.com' 
END WHERE `id` IN ('1','2')

最后

还是希望官方下次更新可以实现下批量更新数据方法,每次拉框架还要修改文件。

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
easyswooleORMPHPswoole
0
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
Hexo博客魔改友链页面_实现自定义提交与个性化设置
上一篇
页面优化:使用JS脚本实现页面链接预加载
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「日志记录」逆向必应翻译网页版API实现免费调用
  • 「代码分享」第三方平台VIP视频解析API接口
  • 「至臻原创」某系统网站登录功能监测
  • 「开发日志」在Vue3中如何为路由Query参数标注类型
  • 「其他分享」分享一个在Tun模式下可用的脚本
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

「代码发布」远程控制开源项目DHL v8.x
2022-09-06 15:32:06
如何使用Python实现海伦公式?
2022-07-11 16:54:29
WordPress开发日志|评论框添加填入QQ自动补全评论者信息功能
2022-02-01 1:12:45

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.975 秒   |  SQL查询 42 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈