tp5如何使用mysql单例模式_TP5单例模式操作Model

这篇文章主要介绍了关于TP5单例模式操作Model,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

一 丶创建数据库和数据库配置

1. 数据库设计如下

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for users

-- ----------------------------

DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (

`u_id` int(255) NOT NULL AUTO_INCREMENT,

`u_name` varchar(50) NOT NULL,

`u_age` int(3) DEFAULT NULL,

`u_sex` tinyint(1) DEFAULT NULL,

PRIMARY KEY (`u_id`)

) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

2. database.php

// +----------------------------------------------------------------------

// | ThinkPHP [ WE CAN DO IT JUST THINK ]

// +----------------------------------------------------------------------

// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.

// +----------------------------------------------------------------------

// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )

// +----------------------------------------------------------------------

// | Author: liu21st

// +----------------------------------------------------------------------

return [

// 数据库类型

'type' => 'mysql',

// 服务器地址

'hostname' => '127.0.0.1',

// 数据库名

'database' => 'singletons',

// 用户名

'username' => 'root',

// 密码

'password' => '123456',

// 端口

'hostport' => '3306',

// 连接dsn

'dsn' => '',

// 数据库连接参数

'params' => [],

// 数据库编码默认采用utf8

'charset' => 'utf8',

// 数据库表前缀

'prefix' => 'u_',

// 数据库调试模式

'debug' => true,

// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)

'deploy' => 0,

// 数据库读写是否分离 主从式有效

'rw_separate' => false,

// 读写分离后 主服务器数量

'master_num' => 1,

// 指定从服务器序号

'slave_no' => '',

// 是否严格检查字段是否存在

'fields_strict' => true,

// 数据集返回类型

'resultset_type' => 'array',

// 自动写入时间戳字段

'auto_timestamp' => false,

// 时间字段取出后的默认时间格式

'datetime_format' => 'Y-m-d H:i:s',

// 是否需要进行SQL性能分析

'sql_explain' => false,

];

二 丶MVC 三者的分离

1.Controller

新建controller:Users.php

2.Model

新建model文件Users.php

3.View

新建users文件夹并新建index.html文件

三丶tp5单例模式的代码实现

1.为什么要使用单例模式

使用单例模式实现逻辑处理与数据库操作分离能很大提升mysql的sql处理能力,并且易于维护

2.controller只处理逻辑,model只处理数据库操作

3.实例,代码如下

HTML:

TP5.0单例模式

Id

placeholder="id">

Name

placeholder="Name">

Remember me

Go

路由设置

// +----------------------------------------------------------------------

// | ThinkPHP [ WE CAN DO IT JUST THINK ]

// +----------------------------------------------------------------------

// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.

// +----------------------------------------------------------------------

// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )

// +----------------------------------------------------------------------

// | Author: liu21st

// +----------------------------------------------------------------------

Route::rule('add','users/add','GET'); // 添加

Route::rule('del','users/del','GET'); // 删除

Route::rule('update','users/update','GET'); // 更新

Route::rule('query','users/query','GET');// 查询

Route::rule('batchupdate','users/batchupdate','GET'); // 更新多个

Controller

namespace app\index\controller;

use app\index\model\Users as UsersModel;

use think\Controller;

use think\Db;

class Users extends Controller

{

/**

* 模板渲染

*/

public function index()

{

return view('index');

}

/**

* 添加一条数据

*/

public function add()

{

$u_id = intval(input('id'));

$u_name = input('name');

$u_age = 18;

$u_sex = 0;

$insertOne = UsersModel::insertOne($u_id,$u_name,$u_age,$u_sex);

if($insertOne)

{

$this->success("插入".$u_name."成功");

}

else{

$this->error("插入".$u_name."失败");

}

}

/**

* 删除一条数据(硬删除)

*/

public function del()

{

$u_id = intval(input('id'));

$delOne = UsersModel::deleteOne($u_id);

if($delOne)

{

$this->success("删除".$u_id."成功");

}

else{

$this->error("删除".$u_id."失败");

}

}

/**

* 更新

*/

public function update()

{

$u_id = intval(input('id'));

$u_age = 18;

$updateOne = UsersModel::updateOne($u_id,$u_age);

if($updateOne)

{

$this->success("更新".$u_id."的年龄为".$u_age."成功");

}

else{

$this->error("更新".$u_id."的年龄为".$u_age."失败");

}

}

/**

* 查询

*/

public function query()

{

$filed = "u_id,u_age"; //多个字段以逗号隔开

$u_id = "";

$query = UsersModel::query($filed,$u_id);

dump($query);

}

/**

* 批量修改

*/

public function batchupdate()

{

$array = array(array('u_id'=>1,'u_name'=>'deng','u_age'=>18,'u_sex'=>1),array('u_id'=>2,'u_name'=>'yuan','u_age'=>19,'u_sex'=>2));

$updateall = UsersModel::batchUpdate($arr);

if($updateall)

{

$this->success("success");

}

else{

$this->error("error");

}

}

}

Model SQL处理 使用static修饰

namespace app\index\model;

use think\Model;

use think\Db;

/**

* 使用静态方法 static 而不是 public 在controller里面不用new 直接用 会方便很多

*/

class Users extends Model

{

private static $instance;

protected $defaultField = 'danli';

private function __clone(){} //禁止被克隆

/**

* 单例

*/

public static function getInstance()

{

if(!(self::$instance instanceof self)){

self::$instance = new static();

}

return self::$instance;

}

/**

* 添加一条数据

*/

public static function insertOne($uid,$uname,$uage,$usex)

{

$inserttheone = self::getInstance()->execute("insert into users(u_id,u_name,u_age,u_sex) value(".$uid.",'".$uname."',".$uage.",".$usex.")");

if($inserttheone)

{

return true;

}

else{

return false;

}

}

/**

* 删除一条数据

*/

public static function deleteOne($uid)

{

$delone = self::getInstance()->execute("delete from users where u_id = ".$uid."");

if($delone)

{

return true;

}

else{

return false;

}

}

/**

* 修改一条数据

*/

public static function updateOne($uid,$age)

{

$updateone = self::getInstance()->execute("update users set u_age = ".$age." where u_uid = ".$uid."");

if($updateone)

{

return true;

}

else{

return false;

}

}

/**

* 查询

*/

public static function query($defaultField,$uid)

{

if($defaultField == '' || empty($defaultField) || is_null($defaultField)){

$defaultField = '*';

}

if($uid == '' || empty($uid) || is_null($uid)){

$uid = '';

}

else{

$uid = "where u_id = $uid";

}

return self::getInstance()->query("select $defaultField from users $uid");

}

/**

* 批量修改

*/

public static function batchUpdate($arr)

{

foreach ($arr as $key => $value) {

$updatearr = self::getInstance()->execute("update users set u_name = '".$value['u_name']."',u_age = ".$value['u_age'].",u_sex = ".$value['u_sex']." where u_uid = ".$uid."");

if($updatearr)

{

return true;

}

else{

return false;

}

}

}

}

四丶以上就是使用单例模式来处理model的一些SQL处理,在tp5中控制器表名model只要一一对应就可以拿来直接用,相对来讲还是比较方便

相关推荐:

Tp5项目修改数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值