1 Unstar Star 0 Fork 9

恢恢娱乐 / swoole-ormPHPApache-2.0

forked from sethink / swoole-orm 
Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
基于swoole的mysql协程连接池,简单封装。实现多个协程间共用同一个协程客户端 spread retract

Clone or download
sethink authored modify
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

swoole-orm

基于swoole的mysql协程连接池,简单封装。  
实现多个协程间共用同一个协程客户端

引入

>composer require sethink/swoole-orm

入门例子

<?php
namespace Demo;

include_once "./vendor/autoload.php";

use sethink\swooleOrm\Db;
use sethink\swooleOrm\MysqlPool;
use swoole;

class Demo
{
    protected $server;

    protected $MysqlPool;

    public function __construct()
    {
        $this->server = new Swoole\Http\Server("0.0.0.0", 9501);
        $this->server->set(array(
            'worker_num'    => 4,
            'max_request'   => 50000,
            'reload_async'  => true,
            'max_wait_time' => 30,
        ));

        $this->server->on('Start', function ($server) {});
        $this->server->on('ManagerStart', function ($server) {});
        $this->server->on('WorkerStart', array($this, 'onWorkerStart'));
        $this->server->on('WorkerStop', function ($server, $worker_id) {});
        $this->server->on('open', function ($server, $request) {});
        $this->server->on('Request', array($this, 'onRequest'));
        $this->server->start();
    }

    public function onWorkerStart($server, $worker_id)
    {
        $config = [
            'host'      => '127.0.0.1', //服务器地址
            'port'      => 3306,    //端口
            'user'      => 'root',  //用户名
            'password'  => 'root',  //密码
            'charset'   => 'utf8',  //编码
            'database'  => 'test',  //数据库名
            'prefix'    => 'sethink_',  //表前缀
            'poolMin'   => 5, //空闲时,保存的最大链接,默认为5
            'poolMax'   => 1000,    //地址池最大连接数,默认1000
            'clearTime' => 60000, //清除空闲链接定时器,默认60秒,单位ms
            'clearAll'  => 300000   //空闲多久清空所有连接,默认5分钟,单位ms
        ];
        $this->MysqlPool = new MysqlPool($config);
        unset($config);
        
        //执行定时器
        $this->MysqlPool->clearTimer($server);
    }

    public function onRequest($request, $response)
    {
        $rs = Db::init($this->MysqlPool)
            ->name('tt')
            ->select();
        var_dump($rs);
    }
}

new Demo();

基本使用

查询

查询单条

<?php

Db::init($this->MysqlPool)
    ->name('user_info')
    ->field('id,username,info')
    ->where(['username'=>'sethink','password'=>'sethink'])
    ->find();

查询多条

<?php

Db::init($this->MysqlPool)
    ->name('info')
    ->field('id,username,password,info')
    ->select();

添加

添加单条数据

<?php

$data = [
    'username' => 'sethink2',
    'password' => 'sethink2',
    'info'     => 'ceshi2'
];

Db::init($this->MysqlPool)
    ->name('user_info')
    ->insert($data);

批量添加

<?php

$data = [
    [
        'username' => 'sethink3',
        'password' => 'sethink3',
        'info'     => 'ceshi3'
    ],
    [
        'username' => 'sethink4',
        'password' => 'password4',
        'info'     => 'ceshi4'
    ]
];

Db::init($this->MysqlPool)
    ->name('user_info')
    ->insertAll($data);

更新数据

<?php

Db::init($this->MysqlPool)
    ->name('user_info')
    ->where(['username'=>'sethink4'])
    ->update(['password'=>'sethink4-4']);

删除数据

<?php

Db::init($this->MysqlPool)
    ->name('user_info')
    ->where(['username'=>'sethink4'])
    ->delete();

详解

init($server)

$server为swoole服务器

name($tableName)

$tableName为表名   --  字符串

field($field)

$field为查询的字段名   --  字符串

order($order)

order by排序  --  数组(一维数组或者二维数组)

例子: $order为一维数组时

<?php

Db::init($this->MysqlPool)
    ->name('user_info')
    ->field('id,username')
    ->order(['id'=>'desc'])
    ->select();

$order为二维数组时

<?php

Db::init($this->MysqlPool)
    ->name('user_info')
    ->field('id,username')
    ->order([['id'=>'desc'],['info'=>'asc']])
    ->select();

group($group)

group by分组  --  字符串

例子:

<?php

Db::init($this->MysqlPool)
    ->name('user_info')
    ->field('id,username')
    ->group('info')
    ->select();

### having($having)

用于配置group从分组中筛选数据   --  字符串

例子:

<?php

Db::init($this->MysqlPool)
    ->name('user_info')
    ->field('id,username')
    ->group('info')
    ->having('count(info) > 5')
    ->select();

distinct($distinct)

数据去重
$distinct为bool值

例子:

<?php

Db::init($this->MysqlPool)
    ->name('user_info')
    ->field('id,username')
    ->distinct(true)
    ->select();

lock($state)

加锁

例子:

<?php

//1、传入bool值
Db::init($this->MysqlPool)
    ->name('user_info')
    ->where(['id'=>1])
    ->lock(true)
    ->find();
//会自动在sql语句加上FOR UPDATE

//2、传入字符串
Db::init($this->MysqlPool)
    ->name('user_info')
    ->where(['id'=>1])
    ->lock('lock in share mode')
    ->find();
//特殊锁要求

fetchSql()

获取sql语句

例子:

<?php


Db::init($this->MysqlPool)
    ->name('user_info')
    ->field('id,username')
    ->fetchSql()
    ->select();

where($whereArray)

$whereArray为数组

例子1:

<?php
//1、
$where = [
    'id'=>'1'
];

//2、
$where = [
    'id'=>['>',5]
];

//3、
$where = [
    'username'=>['LIKE','%seth%']
];

//4、
$where = [
    'id'=>['in',['1','5']]
];



Db::init($this->MysqlPool)
    ->name('user_info')
    ->field('id,username')
    ->where($where)
    ->select();

find()

查询一条数据,返回一维数组

select()

查询一条或多条数据,返回二维数组

insert($data)

插入单条数据
$data为一维数组

insertAll($data)

插入多条数据
$data为二维数组

update($data)

更新数据
$data为一维数组

delete()

删除数据

query($sql)

执行sql语句 --  字符串

例子:

<?php
    
$sql = 'select * from `user_info`';
Db::init($this->MysqlPool)->query($sql);

log($logArray)

开启日志功能
$logArray = [
    '类型',
    '信息'
];

$logArray为一维数组,长度为2
$logArray[0]是日志类型
$logArray[1]是日志信息

例子:

<?php
$Db::init($this->MysqlPool)
    ->name('user_info')
    ->where(['username'=>'sethink'])
    ->log(['查询用户信息','用户名sethink'])
    ->find();

Comments ( 0 )

Sign in for post a comment

PHP
1
https://gitee.com/hhyl/swoole-orm.git
git@gitee.com:hhyl/swoole-orm.git
hhyl
swoole-orm
swoole-orm
master

Search