scpzc/hyperf-db

hyperf数据库操作助手

1.1.0 2022-09-18 13:01 UTC

This package is auto-updated.

Last update: 2025-04-18 18:45:18 UTC


README

1.基本用法

1.1查询

$count = Db::table('user')->count($where,$params); #查询记录数
$userInfo = Db::table('user')->fetchRow($where,$params,$fields); #查询单条
$userList = Db::table('user')->fetchAll($where,$params,$fields); #查询多条
$username = Db::table('user')->fetchOne($where,$params,$fields); #查询某列
$result = Db::table('user')->fetchByPage($where,$params,$fields,$page,$pageSize); #查询分页

以上语句支持原生写法,如:查询单条

$userInfo = Db::fetchRow('SELECT username * FROM user_id=:user_id',['user_id'=>1]);

排序order

$order = 'id desc,age asc';  #支持字符串和数组
$order = ['id'=>'desc','age'=>'asc']; 
$userList = Db::table('user')->order($order)->fetchAll($where,$params,$fields);

限制条数limit

$userList = Db::table('user')->limit($offset,$limit)->fetchAll($where,$params,$fields);

1.2新增

$data = ['username'=>'张三','age'=>10];
$id = Db::table('user')->insert($data); #返回自增ID,只支持单条

1.3修改

$data = ['username'=>'张三','age'=>10];
$where = ['user_id'=>1];
$result = Db::table('user')->update($data,$where); #返回修改记录数,失败返回false,修改0条返回0

1.4删除

$result = Db::table('user')->delete($where); #返回删除记录数

1.5原生操作

Db::table('user')->execute($sql,$params);

1.6选择不同的数据库连接

Db::connect('log')->table('user')->insert($data);

2.WHERE用法

2.1 数组查询

$where = ['user_id'=>1];
$where = [['user_id','=',1]];
$where = [
    ['user_id','>',1],
    ['user_id','<',10],
];
$where = [
    ['user_id','in',[1,2]],
    ['user_id','not in',[3,4]],
];

2.2 绑定参数

$where = "user_id = :user_id and age > :age";
$params = ['user_id'=>1,'age'=>10];

2.3 直接使用原生+绑定参数

$sql = "SELECT username FROM user WHERE user_id = :user_id";
$params = ['user_id'=>1];

3.异常处理

增,删,改,都不会抛出异常,如果需要处理异常,请在app\Listener目录添加FailToExecuteDbListener.php 配置异常处理,如下:

<?php
declare(strict_types=1);
namespace App\Listener;
use Hyperf\Event\Annotation\Listener;
use Hyperf\Event\Contract\ListenerInterface;
use Scpzc\HyperfDb\Event\FailToExecute;

#[Listener]
class FailToExecuteDbListener implements ListenerInterface
{
    public function listen(): array
    {
        return [
            FailToExecute::class,
        ];
    }
    /**
     * @param FailToExecute $event
     */
    public function process(object $event)
    {
        var_dump($event->throwable->getMessage());
    }
}

4.SQL语句调试

4.1 输出sql语句

Db::table('user')->fetchRow($where); 
var_dump(Db::getSql()); #SQL语句会执行,如果有语法错误,可能不能输出

4.2调式sql语句

Db::table('user')->debug()->fetchRow($where); #SQL语句不会执行,会直接在控制台输出SQL语句

5.left join等查询

对于两表以上的联表查询,只能自己写原生语句

6.事务

Db::startTrans()  #开始事务
Db::commit()  #提交事务
Db::rollBack()  #回滚事务