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
<?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 <liu21st@gmail.com> // +---------------------------------------------------------------------- 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:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>TP5.0单例模式</title> <link rel="stylesheet" href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script> <script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <p style="margin-top:20%;"> <form class="form-horizontal" role="form" method="POST" action="{:url('users/add')}"> <p class="form-group"> <label for="firstname" class="col-sm-2 control-label">Id</label> <p class="col-sm-6"> <input type="text" class="form-control" name="id" id="id" placeholder="id"> </p> </p> <p class="form-group"> <label for="lastname" class="col-sm-2 control-label">Name</label> <p class="col-sm-6"> <input type="text" class="form-control" name="name" id="name" placeholder="Name"> </p> </p> <p class="form-group"> <p class="col-sm-offset-2 col-sm-10"> <p class="checkbox"> <label> <input type="checkbox"> Remember me </label> </p> </p> </p> <p class="form-group"> <p class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">Go</button> </p> </p> </form> </p> </body> </html>
路由设置
<?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 <liu21st@gmail.com> // +---------------------------------------------------------------------- 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
<?php 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修饰
<?php 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单例模式操作Model的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

微信勿扰模式什么意思如今,随着智能手机的普及和移动互联网的迅猛发展,社交媒体平台已经成为人们日常生活中不可或缺的一部分。而微信作为国内最流行的社交媒体平台之一,几乎每个人都有一个微信账号。我们可以通过微信与朋友、家人、同事进行实时沟通,分享生活中的点滴,了解彼此的近况。然而,在这个时代,我们也不可避免地面临着信息过载和隐私泄露的问题,特别是对于那些需要专注或

PyCharm是一款非常流行的Python集成开发环境(IDE),它提供了丰富的功能和工具,使得Python开发变得更加高效和便捷。本文将为大家介绍PyCharm的基本操作方法,并提供具体的代码示例,帮助读者快速入门并熟练操作该工具。1.下载和安装PyCharm首先,我们需要前往PyCharm官网(https://www.jetbrains.com/pyc

sudo(超级用户执行)是Linux和Unix系统中的一个关键命令,允许普通用户以root权限运行特定命令。sudo的功能主要体现在以下几个方面:提供权限控制:sudo通过授权用户以临时方式获取超级用户权限,从而实现了对系统资源和敏感操作的严格控制。普通用户只能在需要时通过sudo获得临时的特权,而不需要一直以超级用户身份登录。提升安全性:通过使用sudo,可以避免在常规操作中使用root账户。使用root账户进行所有操作可能会导致意外的系统损坏,因为任何错误或不小心的操作都将具有完全的权限。而

即使在“请勿打扰”模式下接听电话也可能是一种非常烦人的体验。顾名思义,请勿打扰模式可关闭来自邮件、消息等的所有来电通知和警报。您可以按照这些解决方案集进行修复。修复1–启用对焦模式在手机上启用对焦模式。步骤1–从顶部向下滑动以访问控制中心。步骤2–接下来,在手机上启用“对焦模式”。专注模式可在手机上启用“请勿打扰”模式。它不会让您的手机上出现任何来电提醒。修复2–更改对焦模式设置如果对焦模式设置中存在一些问题,则应进行修复。步骤1–打开您的iPhone设置窗口。步骤2–接下来,打开“对焦”模式设

LinuxDeploy的操作步骤及注意事项LinuxDeploy是一款强大的工具,可以帮助用户在Android设备上快速部署各种Linux发行版,让用户能够在移动设备上体验到完整的Linux系统。本文将详细介绍LinuxDeploy的操作步骤以及注意事项,同时提供具体的代码示例,帮助读者更好地使用这一工具。操作步骤:安装LinuxDeploy:首先在

想必很多的用户家里都有那么几台不用的电脑,因为长时间不用完全忘记了开机密码,于是想要知道一下,忘记密码要怎么操作呢?那就一起来看看吧。win10开机密码忘记按F2怎么操作1、按下电脑的电源键,然后开机时按下F2(不同电脑品牌进入bios的按键也不同)。2、在bios界面中,找到security选项(不同品牌电脑的位置可能有所不同)。一般都在顶部的设置菜单中。3、然后找到SupervisorPassword选项并且点击。4、这时候用户就可以看到自己的密码了,同时找到旁边的Enabled切换为Dis

随着智能手机的普及,截屏功能成为日常使用手机的必备技能之一。华为Mate60Pro作为华为公司的旗舰手机之一,其截屏功能自然也备受用户关注。今天,我们就来分享华为Mate60Pro手机的截屏操作步骤,让大家能够更加便捷地进行截屏操作。首先,华为Mate60Pro手机提供了多种截屏方式,可以根据个人习惯选择适合自己的方式进行操作。下面详细介绍几种常用的截

Windows笔记本电脑带有休眠和关机选项。当您将笔记本电脑置于睡眠模式时,它将进入低功耗模式,您可以以任何离开它的方式继续工作。如果您关闭了笔记本电脑,则需要关闭所有程序以及您的工作并重新开始。如果你想在一天内从笔记本电脑上稍事休息,睡眠模式或休眠模式是不错的选择。那关门呢?我应该每次都关闭笔记本电脑吗?让我们来找出答案。我应该每次都关闭笔记本电脑吗?关闭笔记本电脑可能是个好主意,因为可以节省能源、延长设备寿命,特别是在长时间不使用时。但是在白天,将笔记本电脑置于睡眠模式以继续任务是个不错的选
