我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Hyperf操作数据库

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Hyperf操作数据库

Hyperf操作数据库

对于一个 MVC 框架来说,连接操作各种数据库是最基本的功能。而对于 Swoole ,其实我们前面并没有讲很多关于数据库方面的东西,毕竟这不是我们这个系列的主要内容。但之前我们也讲过 连接池 相关的内容,如果小伙伴们不记得了,可以回去看看哦。

连接操作 MySQL

在 Hyperf 中,要操作 MySQL 数据库的话,和 Laravel 也非常类似,在 .env 文件中配置相关的连接信息。

DB_DRIVER=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=testDB_USERNAME=rootDB_PASSWORD=123456DB_CHARSET=utf8mb4DB_COLLATION=utf8mb4_unicode_ciDB_PREFIX=

它的数据库配置文件在 config/autoload/databases.php 中,同样也可以配置多组配置。

return [    'default' => [        'driver' => env('DB_DRIVER', 'mysql'),        'host' => env('DB_HOST', 'localhost'),        'database' => env('DB_DATABASE', 'hyperf'),        'port' => env('DB_PORT', 3306),        'username' => env('DB_USERNAME', 'root'),        'password' => env('DB_PASSWORD', ''),        'charset' => env('DB_CHARSET', 'utf8'),        'collation' => env('DB_COLLATION', 'utf8_unicode_ci'),        'prefix' => env('DB_PREFIX', ''),        'pool' => [            'min_connections' => 1,            'max_connections' => 10,            'connect_timeout' => 10.0,            'wait_timeout' => 3.0,            'heartbeat' => -1,            'max_idle_time' => (float) env('DB_MAX_IDLE_TIME', 60),        ],        'commands' => [            'gen:model' => [                'path' => 'app/Model',                'force_casts' => true,                'inheritance' => 'Model',            ],        ],    ],];

可以看到,在这个配置文件中,相比 Laravel 多了一些内容。从名字就可以看出,pool 相关的内容是连接池的配置。而 commands 则是生成 模型 类所需要使用的命令行配置。

之前我们就一直说过,Hyperf 的数据库操作和模型本身就是基于 Laravel 的组件的,在官方文档上也说了它是基于 illuminate/database 实现的,查询构造器同样也是基于 Laravel Query Builder 。因此,接下来的内容就比较简单了。

查询构造器

// CREATE TABLE `db_test` (//   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,//   `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',//   `sex` int(11) NOT NULL DEFAULT '0',//   PRIMARY KEY (`id`)// ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Router::get('/db/add', function(){    $data = [        [            'name'=>'Peter',            'sex' => 1,        ],        [            'name'=>'Tom',            'sex' => 1,        ],        [            'name'=>'Susan',            'sex' => 2,        ],        [            'name'=>'Mary',            'sex' => 2,        ],        [            'name'=>'Jim',            'sex' => 1,        ],    ];    foreach ($data as $v) {        $insertId[] = \Hyperf\DbConnection\Db::table('db_test')->insertGetId($v);    }    return $insertId;});​Router::get('/db/update', function(\Hyperf\HttpServer\Contract\RequestInterface $request){    $data = [        'name' => $request->input('name', ''),        'sex' => $request->input('sex', 0),        'id' => $request->input("id", 0),    ];​    if($data['id'] < 1 || !$data['name'] || !in_array($data['sex'], [1, 2])){        return '参数错误';    }​    return \Hyperf\DbConnection\Db::table('db_test')->where("id", "=", $data['id'])->update($data);});​Router::get('/db/delete', function(\Hyperf\HttpServer\Contract\RequestInterface $request){    $id = $request->input('id', 0);    if($id < 1){        return '参数错误';    }​    return \Hyperf\DbConnection\Db::table('db_test')->delete($id);});​Router::get('/db/list', function (\Hyperf\HttpServer\Contract\RequestInterface $request) {    $where = [];    if($request->has("name")){        $where[] = ['name', 'like', '%' . $request->input('name') . '%'];    }    if($request->has("sex")){        $where[] = ['sex', '=', $request->input('sex')];    }​    return \Hyperf\DbConnection\Db::table('db_test')        ->select(['*'])        ->where($where)        ->orderBy('id', 'desc')        ->limit(10)        ->offset(0)        ->get()        ->toArray();});​Router::get('/db/info', function (\Hyperf\HttpServer\Contract\RequestInterface $request, \Hyperf\HttpServer\Contract\ResponseInterface $response) {    $id = (int)$request->input('id', 0);    if($id < 1){        return '参数错误';    }​    return $response->json(\Hyperf\DbConnection\Db::table('db_test')->find($id));});

一次性把增删改查的操作都给出了哦。使用的数据库表也是之前我们在讲 Laravel 系列时使用过的。非常明显地就可以看出,这一系列的操作,甚至是方法名以及参数都和我们 Laravel 中的查询构造器基本是一致的。不同的就是在 Hyperf 中,Db 后面这个字母是小写的,而在 Laravel 中则是两个大写字母。

同时,在上面的例子中我们还看到了请求和响应对象相关的操作,如何获取请求参数,如何输出响应数据,并且还能指定为响应 json 格式。这两个注入对象参数在控制器中也是可以使用的,我们就不再单独去讲控制器啦。

模型

模型这一块其实也很简单,它也是基于 Laravel 的 Eloquent ORM 。我们先使用一个命令生成模型。

php bin/hyperf.php gen:model db_test

这样就会在 app/Model 目录下生成一个 DbTest.php 文件。

class DbTest extends Model{    protected $table = 'db_test';    protected $fillable = [];    protected $casts = ['id' => 'integer', 'sex' => 'integer'];}

剩下的还需要多解释嘛,来一个简单的小例子吧。

Router::get('/db/model/list', function (\Hyperf\HttpServer\Contract\RequestInterface $request) {    $where = [];    if($request->has("name")){        $where[] = ['name', 'like', '%' . $request->input('name') . '%'];    }    if($request->has("sex")){        $where[] = ['sex', '=', $request->input('sex')];    }​    return \App\Model\DbTest::select()->where($where)        ->orderBy('id', 'desc')        ->limit(10)        ->offset(0)        ->get()        ->toArray();});

关于模型其它的操作就不演示了,非常简单方便,使用过 Laravel 的同学上手没难度的。

连接操作 Redis

MySQL 数据库的内容说完了,我们再来看看 Redis ,同样也不难,也是配置 .env 就可以直接使用了,不过我们还是看一下它的配置文件,在 config/autoload/redis.php 中。

return [    'default' => [        'host' => env('REDIS_HOST', 'localhost'),        'auth' => env('REDIS_AUTH', null),        'port' => (int) env('REDIS_PORT', 6379),        'db' => (int) env('REDIS_DB', 0),        'pool' => [            'min_connections' => 1,            'max_connections' => 10,            'connect_timeout' => 10.0,            'wait_timeout' => 3.0,            'heartbeat' => -1,            'max_idle_time' => (float) env('REDIS_MAX_IDLE_TIME', 60),        ],    ],];

和 MySQL 一样,也有连接池的配置。之前我们讲连接池的时候也是讲的 MySQL 和 Redis 的连接池,这里正好也对应上了。

接下来也是两个简单的小例子。

Router::get('/db/redis/set', function () {    $redis = Hyperf\Utils\ApplicationContext::getContainer()->get(\Hyperf\Redis\Redis::class);    return $redis->set("time", "看看现在时间 " . date("Y-m-d H:i:s"));});​Router::get('/db/redis/get', function () {    $container = Hyperf\Utils\ApplicationContext::getContainer();​    $redis = $container->get(\Hyperf\Redis\Redis::class);​    return $redis->get("time");});

稍有不同的是,redis 对象的产生方式是需要从 ApplicationContext 这个应用上下文对象的静态方法中获取的。

总结

今天的内容非常简单,没有什么学习压力吧。一开始就说过了,这个框架的很多东西都和 Laravel 是一样一样的,而且我之前的项目甚至可以达到大部分的代码平行迁移过来。怎么说呢,百花齐放是好事,各种思想经验可以学习借鉴,但天下大同也不是什么坏事,对于业务应用来说会非常方便。

有兴趣的小伙伴到这里其实就完全可以尝试尝试用 Hyperf 写一个小程序试试咯!

测试代码:

https://github.com/zhangyue0503/swoole/tree/main/6.框架/hyperf-skeleton

参考文档:

Hyperf

Hyperf

来源地址:https://blog.csdn.net/zhanghao143lina/article/details/130526922

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Hyperf操作数据库

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2、操作数据库

操作数据库操作数据库 > 操作数据库中的表 > 操作数据库中表的数据MySQL关键字不区分大小写2.1、操作数据库(了解)1.创建数据库CREATE DATABASE westos;2.删除数据库DROP DATABASE westos;3.使用数据库
2、操作数据库
2022-01-25

laravel数据库操作

了解 Laravel 某个模块的内部实现,最好的切入点就是从 composer.json 开始,从里面我们主要可以得到以下信息:require 字段可以
2016-06-17

python操作数据库

游标  在stored Routines调用中开的一个缓冲区,用于存放SQL调用的结果集。(结果集是只读的)   意味着我们的查询可以返回一个文档也可以返回一个游标去指向一个结果集,而后通过游标的切换而获取每个结果   Python连接数
2023-01-31

MySQL 操作数据库、数据表

通过mysql-client连接到mysql-server,sql语句要以分号结尾,这样按Enter才会执行sql语句。mysql关键字不区分大小写字符串、时间日期类型的值要引起来  数据库操作show databases; #显示已有的数据库create
MySQL  操作数据库、数据表
2016-11-30

php操作mysql(数据库常规操作)

PHP操作MySQL数据库常规操作指南本指南介绍了使用PHP操作MySQL数据库的常规操作,包括连接、查询、插入、更新、删除数据以及最佳实践。通过代码示例,您将了解如何建立连接、执行查询、管理数据和防止SQL注入攻击。这些操作是数据库开发中的基础,对于有效管理数据至关重要。遵循这些准则,您可以提升PHP与MySQL数据库交互的效率和安全性。
php操作mysql(数据库常规操作)
2024-04-26

MongoDB(三):数据库操作、集合操作

1. 数据库操作看完前面的文章,大家应该把环境搭建好了,下面我们就开始学习MongoDB的一些基本操作了。首先我们要了解的一些要点:MongoDB将数据存储为一个文档,数据结构由键值对(key=>value)组成MongoDB文档类似于JSON对象,字段值可以
MongoDB(三):数据库操作、集合操作
2017-03-01

php操作mysql(数据库常规操作)

php操作数据库八步走 4";//删除数据// 执行 SQL 语句$result = mysqli_query($link, $sql);// 解析 SQL 语句执行结果if ($result) { echo "执行成功!" . " 成功删除了数
php操作mysql(数据库常规操作)
2016-04-04

PostgreSQL 数据库操作函数

查看当前数据库的连接状态SELECT * FROM pg_stat_activity WHERE datname ="mydb";
PostgreSQL 数据库操作函数
2017-12-24

数据库操作命令

DB commands常用数据库操作命令目录MySQLPostgreSQLMySQL基础命令配置命令备份与还原基础命令KeyCommand清屏system clear Ctrl + l (滚屏[1])登录mysql -u root -p切换数据库USE d
数据库操作命令
2016-01-15

Python3操作MySQL数据库

在Python3中操作MySQL数据库在Python3中使用mysql数据库需要安装pymysql库pip install pymysql操作MySQL导包import pymysql第一步:打开数据库连接db = pymysql.connect(host="
2016-12-01

python操作mysql数据库

一、数据库基本操作 1. 想允许在数据库写中文,可在创建数据库时用下面命令 create database zcl charset utf8; 2. 查看students表结构 desc students; 3. 查看创建students表
2022-06-04

Python3 操作Mysql数据库

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,而Python2中则使用mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL
2023-01-31

python 操作MySQL数据库

1.connectdef conn(ip,user,password,database): con = mdb.connect(ip,user,password,database) cur = con.cursor() r
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录