iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Hyperf操作数据库
  • 409
分享到

Hyperf操作数据库

php数据库mysql 2023-09-15 09:09:38 409人浏览 安东尼
摘要

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

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

--结束END--

本文标题: Hyperf操作数据库

本文链接: https://www.lsjlt.com/news/408385.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Hyperf操作数据库
    Hyperf操作数据库 对于一个 MVC 框架来说,连接操作各种数据库是最基本的功能。而对于 Swoole ,其实我们前面并没有讲很多关于数据库方面的东西,毕竟这不是我们这个系列的主要内容。但之前我们也讲过 连接池 相关的内容,如果小伙伴们...
    99+
    2023-09-15
    php 数据库 mysql
  • 【MySQL】数据库——库操作
    文章目录 1. 创建数据库[IF NOT EXISTS] 的使用 2. 删除库3. 数据库的编码问题查看系统默认支持的字符集查看系统默认支持的校验集只查看 database的校验集指定编码...
    99+
    2023-10-20
    数据库 mysql
  • python操作数据库
     游标  在stored Routines调用中开的一个缓冲区,用于存放SQL调用的结果集。(结果集是只读的)   意味着我们的查询可以返回一个文档也可以返回一个游标去指向一个结果集,而后通过游标的切换而获取每个结果   Python连接...
    99+
    2023-01-31
    操作 数据库 python
  • laravel 数据库操作
    一:数据库配置 数据库配置文件放置在config/database.php 文件中 1:基础配置 'connections' => [ 'mysql' => [ 'driver' => 'mysql', #数据...
    99+
    2023-09-07
    laravel php Powered by 金山文档
  • django操作多数据库
    1、    添加数据库路由分配文件 在项目文件夹里创建‘database_router’文件。将下面的代码复制到该文件里。 from django.conf import settings DATABASE_MAPPING =...
    99+
    2023-01-30
    操作 django
  • Python操作redis数据库
    前言:这两天的事情不多,为了避免之前学习的一点点Python知识遗忘,我在Github上找了一些小项目跟着实践。之前的工作有写过相关的Python处理redis处理数据的脚本,但之前没有养成记录积累的习惯,所以~~~~(遗忘了),所以趁此...
    99+
    2023-01-31
    操作 数据库 Python
  • Python——操作MySQL数据库
    😊Python——操作MySQL数据库 🚀前言🔍数据库编程🍭数据库编程基本介绍🍭数据库编程接口🍭...
    99+
    2023-09-15
    数据库 python mysql
  • PHP操作MySQL数据库
    PHP操作MySQL数据库的步骤如下:1. 连接数据库:使用`mysqli_connect()`函数或者`PDO`类来建立与MySQ...
    99+
    2023-09-05
    php
  • py_Django的数据库操作
    数据库引擎pymysql   取而代之    ----推荐    2的话pip install pymysql&nb...
    99+
    2024-04-02
  • Python3 操作Mysql数据库
    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,而Python2中则使用mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQ...
    99+
    2023-01-31
    操作 数据库 Mysql
  • python操作sybase数据库
    python 对于数据库的使用如下 # 打开数据库连接 #dbName指的是具体数据库的名称,例如mysql 的一个模块为mysqldb db = dbName.connect("localhost","testuser","test1...
    99+
    2023-01-31
    操作 数据库 python
  • Python操作PostgreSQL数据库
    个人简介:一个从会计转行数据分析师的三旬老汉 擅长领域:数据分析、数据仓库、大数据 博客内容:平时会将自己工作中遇到的问题进行归纳总结,分享给各位小伙伴,意在帮助大家少加班、不掉发,让我们相互学习...
    99+
    2023-10-27
    数据库 postgresql python
  • 【MySQL】数据库的操作
    目录 前言 创建数据库 编码集和校验集 不同校验集的区别 删除数据库 确认当前数据库 查看数据库属性 修改数据库属性 备份与还原 数据库和表的备份 还原 创建表 查看列结构 查看表属性 修改表的列 修改表名称  修改列名称 删除表 前言...
    99+
    2023-09-14
    数据库 mysql
  • nodejs操作MySQL数据库
    1、操作数据库的步骤 安装操作 MySQL 数据库的第三方模块(mysql)通过 mysql 模块连接到 MySQL 数据库通过 mysql 模块执行 SQL 语句   2、安装与配置 mysql 模块 2.1、安装 mysql 模块 m...
    99+
    2023-10-06
    数据库 javascript node.js mysql 前端
  • 【MySQL】数据库——表操作
    文章目录 1. 创建表2. 查看表3. 修改表修改表名add ——增加modify——修改drop——删除修改列名称 4. 删除表 1. 创建表 语法: create table ...
    99+
    2023-10-26
    数据库 mysql
  • mysql-数据库的操作
    系统数据库执行如下命令,查看系统所有的数据库mysql> show databases;+--------------------+| Database           |+---...
    99+
    2023-01-30
    操作 数据库 mysql
  • python 操作MySQL数据库
    1.connect def conn(ip,user,password,database): con = mdb.connect(ip,user,password,database) cur = con.cursor() ...
    99+
    2023-01-31
    操作 数据库 python
  • 数据库和表操作
    -- 创建数据库 -- 创建 classroom 数据库 create database 数据库名 default character set 字符编码 collate 排序规则;   ...
    99+
    2024-04-02
  • Python的数据库操作
    使用原生SQL语句进行对数据库操作,可完成数据库表的建立和删除,及数据表内容的增删改查操作等。其可操作性很强,如可以直接使用“show databases”、“show tables”等语句进行表格之外的部分操作。 Centos7远程操作...
    99+
    2023-01-31
    操作 数据库 Python
  • Python 操作 MySQL 数据库
    Python 操作 MySQL 数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。 Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...
    99+
    2023-09-01
    adb
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作