1 Star 2 Fork 1

Dizy / Sworm

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Sworm - 基于Swoole的异步MySQL数据库ORM框架

License PRs Welcome GitHub stars GitHub forks

Sworm是一个基于Swoole的异步MySQL调用的ORM数据库框架。该框架封装了swoole_mysql,API与NotORM很相似。使用Sworm能更加轻松地生成查询语句,使代码结构更加清晰,返回更加规范。 任何问题 QQ: 529189858 或者 mailto: derzart@gmail.com

环境要求

Sworm的至少工作在以下环境:

  • PHP 5.3.10 +
  • Swole 1.7 +

快速入门

初始化

在使用Sworm前,请确保已先include源码包根目录下的Sworm.php

$mySworm = new Sworm();

连接

$server = array(
     'host' => '192.168.56.102',
     'port' => 3306,
     'user' => 'test',
     'password' => 'test',
     'database' => 'test',
     'charset' => 'utf8', //指定字符集
     'timeout' => 2,  // 可选:连接超时时间(非查询超时时间),默认为SW_MYSQL_CONNECT_TIMEOUT(1.0)
	'prefix' => 'sw_', //可选:表前缀
     'debug' => true //调试模式,开启会在执行查询时输出查询语句
);

$mySworm->connect($server, function($ret){
	if($ret->status){
		printf("连接成功\n");
	}else{
		var_dump($ret->errorCode, $ret->errorMsg);
	}
});

断开连接

$mySworm->disconnect();

徒手Query

$mySworm->query("SELECT * FROM sw_user WHERE id = '1'", function($ret){
	if($ret->status){
		var_dump($ret->result);
	}else{
		var_dump($ret->errorCode, $ret->errorMsg);
	}
});

获取表对象

成员属性方式获取

$user = $mySworm->user;

table方法获取

$user = $mySworm->table('user');

**注意:**这里表名前会自动加上connect时填写的prefix前缀参数。则实际上这里访问的表是sw_user。

表对象:基本操作

以下方法使用没有先后顺序限制,Sworm会在最终查询时自动生成正确的顺序。

(1) SELECT

$user->select("username, password, gender")
//或者
$user->select(['username', 'password', 'gender'])

(2) WHERE

//直接填写完整WHERE语句(需手动进行过滤,不推荐)
$user->where("id = '2' AND username = 'yeahyeah'")

//使用预处理占位符
$user->where("id = ? AND username = ?", 2, 'yeahyeah')

//使用数组
$user->where(array(
	'id'=>2,
	'username'=>'yeahyeah'
))

/*数组的更多高级用法*/

//WHERE id IN ('1','2','3')
$user->where(array(
	'id'=>new Sworm_In([1,2,3])
))

//WHERE username LIKE '%张%'
$user->where(array(
	'id'=>new Sworm_Like('%张%')
))

同理还有Sworm_NotIn、Sworm_NotLike、Sworm_RegExp(正则表达式)、Sworm_Literal(原式)

(3) ORDER BY

单个字段排序:

//ORDER BY age
$user->order('age')
//ORDER BY age DESC
$user->order('age DESC')

多个字段排序:

//ORDER BY age
$user->order('age')
//ORDER BY id, age DESC
$user->order('id')->order('age DESC')
/*或者*/ $user->order('id, age DESC')

(4) LIMIT

按数量限制:

// LIMIT 10
$user->limit(10)

按数量和偏移量限制(请注意:先数量、再偏移量,与MySQL语句顺序相反):

// LIMIT 2,10 
$user->limit(10, 2)//从位置为2的记录开始取出10条记录

(5) GROUP BY和HAVING

不带HAVING:

// GROUP BY note
$user->group('note')

带HAVING:

// GROUP BY note HAVING age > 10
$user->group('note', 'age > 10')

表对象:查询 (Retrieve)

(1) 获取结果数组:fetch

$user->select('username, password')
     ->where('id = ?', 1)
     ->fetch(function($ret){
	     if($ret->status){
		     var_dump($ret->result);//成功返回结果数组
	     }else{
			 var_dump($ret->errorCode, $ret->errorMsg);//失败返回错误码和错误信息
		 }
	 });

(2) 计数:count

$user->where('age >= ?', 18)
     ->count(function($ret){
	     if($ret->status){
		     var_dump($ret->result);//成功返回个数(int)
	     }else{
			 var_dump($ret->errorCode, $ret->errorMsg);//失败返回错误码和错误信息
		 }
	 });

(2) 求和:sum

$user->where('age < ?', 18)
     ->sum('money',function($ret){
	     if($ret->status){
		     var_dump($ret->result);//成功返回总和(number)
	     }else{
			 var_dump($ret->errorCode, $ret->errorMsg);//失败返回错误码和错误信息
		 }
	 });

(3) 最大值:max

$user->where('age < ?', 18)
     ->max('money',function($ret){
	     if($ret->status){
		     var_dump($ret->result);//成功返回最大值(number)
	     }else{
			 var_dump($ret->errorCode, $ret->errorMsg);//失败返回错误码和错误信息
		 }
	 });

(4) 最小值:min

$user->where('age < ?', 18)
     ->min('money',function($ret){
	     if($ret->status){
		     var_dump($ret->result);//成功返回最小值(number)
	     }else{
			 var_dump($ret->errorCode, $ret->errorMsg);//失败返回错误码和错误信息
		 }
	 });

表对象:插入 (Insert)

$user->insert(array(
		'username'=>'yeahyeah',
		'password'=>'uNsJ2k8mQz'
	),function($ret){
    if($ret->status){
	    var_dump($ret->result);//成功返回影响的记录数
		printf("插入成功\n");
    }else{
		var_dump($ret->errorCode, $ret->errorMsg);//失败返回错误码和错误信息
	}
});

表对象:更新 (Update)

$user->where('id = ?', 1)
	 ->update(array(
			 'age'=>19,
			 'password'=>'lmaolmao'
		 ),function($ret){
		     if($ret->status){
			     var_dump($ret->result);//成功返回影响的记录数
			     printf("更新成功\n");
			 }else{
				 var_dump($ret->errorCode, $ret->errorMsg);//失败返回错误码和错误信息
		 }
	 });

表对象:删除 (Delete)

$user->where('id = ?', 1)
	 ->delete(function($ret){
		     if($ret->status){
			     var_dump($ret->result);//成功返回影响的记录数
			     printf("删除成功\n");
			 }else{
				 var_dump($ret->errorCode, $ret->errorMsg);//失败返回错误码和错误信息
		 }
	 });

统一的回调函数参数 $ret

Sworm使用回调函数实现异步,所有回调函数都应统一接受一个 $ret 参数。当请求执行完成后进行回调时,Sworm将会把请求结果封装成一个 Sworm_Result 对象并作为参数传递给回调函数。

Sworm_Result 对象的成员如下:

/* status 
 * 表示请求是否成功,布尔值,真为成功,假为失败
 */
$ret->status 
//或者
$ret->getStatus()

/* result
 * 表示请求结果,类型根据具体请求而定
 */
$ret->result
//或者
$ret->getResult()

/* errorCode
 * 表示失败错误码
 */
$ret->errorCode
//或者
$ret->getErrorCode()


/* errorMsg
 * 表示失败错误信息
 */
$ret->errorMsg
//或者
$ret->getErrorMsg()

/* sworm
 * 当前Sworm对象,方便回调函数闭包内使用
 */
$ret->sworm

事务

$mySworm->begin(function($ret){
	$data = [...];
	$ret->sworm->user->update($data, function($ret){
		if($ret->status){
			//更新成功则提交事务
			$ret->sworm->commit(function($ret){
				echo "事务提交完成\n";
			});
		}else{
			//失败则回滚事务
			$ret->sworm->rollback(function($ret){
				echo "事务回滚完成\n";
			});
		}
	})
})
The MIT License (MIT) Copyright (c) 2017 Dizy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

基于Swoole的MySQL数据库ORM框架,更高效地使用MySQL查询。类似于NotORM。 展开 收起
PHP
MIT
取消

发行版 (1)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
PHP
1
https://gitee.com/dizy/Sworm.git
git@gitee.com:dizy/Sworm.git
dizy
Sworm
Sworm
master

搜索帮助