hyperf/docs/zh-hk/db/db.md

83 lines
3.6 KiB
Markdown
Raw Normal View History

2019-12-12 16:24:04 +08:00
# 極簡的 DB 組件
[hyperf/database](https://github.com/hyperf/database) 功能十分強大,但也不可否認效率上確實些許不足。這裏提供一個極簡的 `hyperf/db` 組件,支持 `PDO``Swoole Mysql`
## 安裝
```bash
composer require hyperf/db
```
## 發佈組件配置
該組件的配置文件位於 `config/autoload/db.php`,如果文件不存在,可通過下面的命令來將配置文件發佈到骨架去:
```bash
php bin/hyperf.php vendor:publish hyperf/db
```
## 組件配置
默認配置 `config/autoload/db.php` 如下,數據庫支持多庫配置,默認為 `default`
| 配置項 | 類型 | 默認值 | 備註 |
|:--------------------:|:------:|:------------------:|:--------------------------------:|
| driver | string | 無 | 數據庫引擎 支持 `pdo``mysql` |
| host | string | `localhost` | 數據庫地址 |
| port | int | 3306 | 數據庫地址 |
| database | string | 無 | 數據庫默認 DB |
| username | string | 無 | 數據庫用户名 |
| password | string | null | 數據庫密碼 |
| charset | string | utf8 | 數據庫編碼 |
| collation | string | utf8_unicode_ci | 數據庫編碼 |
| fetch_mode | int | `PDO::FETCH_ASSOC` | PDO 查詢結果集類型 |
| pool.min_connections | int | 1 | 連接池內最少連接數 |
| pool.max_connections | int | 10 | 連接池內最大連接數 |
| pool.connect_timeout | float | 10.0 | 連接等待超時時間 |
| pool.wait_timeout | float | 3.0 | 超時時間 |
| pool.heartbeat | int | -1 | 心跳 |
| pool.max_idle_time | float | 60.0 | 最大閒置時間 |
| options | array | | PDO 配置 |
## 組件支持的方法
具體接口可以查看 `Hyperf\DB\ConnectionInterface`
| 方法名 | 返回值類型 | 備註 |
2020-03-10 11:41:31 +08:00
|:----------------:|:--------------:|:------------------------------------:|
2019-12-12 16:24:04 +08:00
| beginTransaction | `void` | 開啟事務 支持事務嵌套 |
| commit | `void` | 提交事務 支持事務嵌套 |
| rollBack | `void` | 回滾事務 支持事務嵌套 |
2020-03-10 11:41:31 +08:00
| insert | `int` | 插入數據,返回主鍵 ID非自增主鍵返回 0 |
2019-12-12 16:24:04 +08:00
| execute | `int` | 執行 SQL返回受影響的行數 |
| query | `array` | 查詢 SQL返回結果集列表 |
2020-03-10 11:41:31 +08:00
| fetch | `array, object`| 查詢 SQL返回結果集的首行數據 |
| connection | `self` | 指定連接的數據庫 |
2019-12-12 16:24:04 +08:00
## 使用
### 使用 DB 實例
```php
<?php
use Hyperf\Utils\ApplicationContext;
use Hyperf\DB\DB;
$db = ApplicationContext::getContainer()->get(DB::class);
$res = $db->query('SELECT * FROM `user` WHERE gender = ?;', [1]);
```
### 使用靜態方法
```php
<?php
use Hyperf\DB\DB;
$res = DB::query('SELECT * FROM `user` WHERE gender = ?;', [1]);
```