ホームページ バックエンド開発 PHPチュートリアル TP5シングルトンモード動作モデル

TP5シングルトンモード動作モデル

May 03, 2018 am 11:11 AM
model 操作する モデル

この記事では、主に TP5 シングルトン モードの動作モデルを紹介します。これは、必要な友人に参考にしていただけるようになりました。

1丶データベースの作成とデータベース構成

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 [
    // 数据库类型
    &#39;type&#39;            => &#39;mysql&#39;,
    // 服务器地址
    &#39;hostname&#39;        => &#39;127.0.0.1&#39;,
    // 数据库名
    &#39;database&#39;        => &#39;singletons&#39;,
    // 用户名
    &#39;username&#39;        => &#39;root&#39;,
    // 密码
    &#39;password&#39;        => &#39;123456&#39;,
    // 端口
    &#39;hostport&#39;        => &#39;3306&#39;,
    // 连接dsn
    &#39;dsn&#39;             => &#39;&#39;,
    // 数据库连接参数
    &#39;params&#39;          => [],
    // 数据库编码默认采用utf8
    &#39;charset&#39;         => &#39;utf8&#39;,
    // 数据库表前缀
    &#39;prefix&#39;          => &#39;u_&#39;,
    // 数据库调试模式
    &#39;debug&#39;           => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    &#39;deploy&#39;          => 0,
    // 数据库读写是否分离 主从式有效
    &#39;rw_separate&#39;     => false,
    // 读写分离后 主服务器数量
    &#39;master_num&#39;      => 1,
    // 指定从服务器序号
    &#39;slave_no&#39;        => &#39;&#39;,
    // 是否严格检查字段是否存在
    &#39;fields_strict&#39;   => true,
    // 数据集返回类型
    &#39;resultset_type&#39;  => &#39;array&#39;,
    // 自动写入时间戳字段
    &#39;auto_timestamp&#39;  => false,
    // 时间字段取出后的默认时间格式
    &#39;datetime_format&#39; => &#39;Y-m-d H:i:s&#39;,
    // 是否需要进行SQL性能分析
    &#39;sql_explain&#39;     => false,
];
ログイン後にコピー

2丶MVC 3つの分離

1.Controller

新しいコントローラーを作成します: Users.php

2.Model

新しいモデルファイルを作成します Users.php

3.View

新しい users フォルダーを作成し、新しい Index.html ファイルを作成します

tp5 シングルトン モードの 3 つのコード実装

1. シングルトン モードを使用する理由

シングルトン モードを使用して論理処理とデータベース操作を分離すると、大幅に改善されます。 mysql SQL 処理能力、メンテナンスが容易

2. コントローラーはロジックのみを処理し、モデルはデータベース操作のみを処理します

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(&#39;users/add&#39;)}">
		<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(&#39;add&#39;,&#39;users/add&#39;,&#39;GET&#39;); // 添加

Route::rule(&#39;del&#39;,&#39;users/del&#39;,&#39;GET&#39;); // 删除

Route::rule(&#39;update&#39;,&#39;users/update&#39;,&#39;GET&#39;); // 更新

Route::rule(&#39;query&#39;,&#39;users/query&#39;,&#39;GET&#39;);// 查询

Route::rule(&#39;batchupdate&#39;,&#39;users/batchupdate&#39;,&#39;GET&#39;); // 更新多个
ログイン後にコピー

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(&#39;index&#39;);
    }
    /**
    * 添加一条数据
    */
    public function add()
    {
        $u_id = intval(input(&#39;id&#39;));
        $u_name = input(&#39;name&#39;);
        $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(&#39;id&#39;));
        $delOne = UsersModel::deleteOne($u_id);
        if($delOne)
        {
            $this->success("删除".$u_id."成功");
        }
        else{
            $this->error("删除".$u_id."失败");
        }
    }
    /**
    * 更新
    */
    public function update()
    {
        $u_id = intval(input(&#39;id&#39;));
        $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(&#39;u_id&#39;=>1,&#39;u_name&#39;=>&#39;deng&#39;,&#39;u_age&#39;=>18,&#39;u_sex&#39;=>1),array(&#39;u_id&#39;=>2,&#39;u_name&#39;=>&#39;yuan&#39;,&#39;u_age&#39;=>19,&#39;u_sex&#39;=>2));
        $updateall = UsersModel::batchUpdate($arr);
        if($updateall)
        {
            $this->success("success");
        }
        else{
            $this->error("error");
        }
    }
}
ログイン後にコピー

モデルの SQL 処理は静的変更を使用します

<?php
namespace app\index\model;

use think\Model;
use think\Db;
/**
 * 使用静态方法 static 而不是 public 在controller里面不用new 直接用 会方便很多
 */
class Users extends Model
{   
    private static $instance;
    protected $defaultField = &#39;danli&#39;;
    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.",&#39;".$uname."&#39;,".$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 == &#39;&#39; || empty($defaultField) || is_null($defaultField)){
            $defaultField = &#39;*&#39;;   
        }
        if($uid == &#39;&#39; || empty($uid) || is_null($uid)){
            $uid = &#39;&#39;;   
        }
        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 = &#39;".$value[&#39;u_name&#39;]."&#39;,u_age = ".$value[&#39;u_age&#39;].",u_sex = ".$value[&#39;u_sex&#39;]." where u_uid = ".$uid."");
            if($updatearr)
            {
                return true;
            }
            else{
                return false;
            }
        }
    }
}
ログイン後にコピー

上記 4 つは、モデルの一部の SQL 処理を処理するためにシングルトン モードを使用しています。tp5 では、1 対 1 に対応している限り、コントローラー テーブル名モデルを直接使用できます。比較的便利です

関連する推奨事項:

Tp5 プロジェクト修正データベース

以上がTP5シングルトンモード動作モデルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WeChat の「おやすみモード」は何をするのですか? WeChat の「おやすみモード」は何をするのですか? Feb 23, 2024 pm 10:48 PM

WeChat のサイレント モードとはどういう意味ですか? 現在、スマートフォンの人気とモバイル インターネットの急速な発展により、ソーシャル メディア プラットフォームは人々の日常生活に欠かせないものとなっています。 WeChat は中国で最も人気のあるソーシャル メディア プラットフォームの 1 つであり、ほとんどの人が WeChat アカウントを持っています。私たちは WeChat を通じて友人、家族、同僚とリアルタイムでコミュニケーションを取り、生活の瞬間を共有し、お互いの現在の状況を理解することができます。しかし、この時代では、特に集中力や集中力が必要な人々にとって、情報過多やプライバシー漏洩の問題にも必然的に直面します。

PyCharm の使用法チュートリアル: 操作の実行方法を詳しく説明します PyCharm の使用法チュートリアル: 操作の実行方法を詳しく説明します Feb 26, 2024 pm 05:51 PM

PyCharm は非常に人気のある Python 統合開発環境 (IDE) であり、Python 開発をより効率的かつ便利にするための豊富な機能とツールを提供します。この記事では、PyCharm の基本的な操作方法を紹介し、読者がすぐに使い始めてツールの操作に習熟できるように、具体的なコード例を示します。 1. PyCharm をダウンロードしてインストールします。 まず、PyCharm 公式 Web サイト (https://www.jetbrains.com/pyc) にアクセスする必要があります。

sudo とは何ですか?なぜ重要ですか? sudo とは何ですか?なぜ重要ですか? Feb 21, 2024 pm 07:01 PM

sudo (スーパーユーザー実行) は、一般ユーザーが root 権限で特定のコマンドを実行できるようにする、Linux および Unix システムの重要なコマンドです。 sudo の機能は主に次の側面に反映されています。 権限制御の提供: sudo は、ユーザーにスーパーユーザー権限を一時的に取得することを許可することで、システム リソースと機密性の高い操作を厳密に制御します。一般のユーザーは、必要な場合にのみ sudo を介して一時的な権限を取得できるため、常にスーパーユーザーとしてログインする必要はありません。セキュリティの向上: sudo を使用すると、日常的な操作中に root アカウントの使用を回避できます。すべての操作に root アカウントを使用すると、誤った操作や不注意な操作には完全な権限が与えられるため、予期しないシステムの損傷につながる可能性があります。そして

iPhoneでサイレントモードが機能しない:修正 iPhoneでサイレントモードが機能しない:修正 Apr 24, 2024 pm 04:50 PM

おやすみモードで電話に応答することさえ、非常に煩わしい経験になる可能性があります。名前が示すように、おやすみモードでは、すべての着信通知と電子メール、メッセージなどからの警告がオフになります。これらのソリューション セットに従って問題を修正できます。解決策 1 – フォーカス モードを有効にする 携帯電話でフォーカス モードを有効にします。ステップ 1 – 上から下にスワイプしてコントロール センターにアクセスします。ステップ 2 – 次に、携​​帯電話の「フォーカスモード」を有効にします。フォーカス モードでは、電話機のサイレント モードが有効になります。携帯電話に着信通知が表示されることはありません。解決策 2 – フォーカス モード設定を変更する フォーカス モード設定に問題がある場合は、修正する必要があります。ステップ 1 – iPhone の設定ウィンドウを開きます。ステップ 2 – 次に、フォーカス モード設定をオンにします

Linux Deployの操作手順と注意事項 Linux Deployの操作手順と注意事項 Mar 14, 2024 pm 03:03 PM

LinuxDeploy の操作手順と注意事項 LinuxDeploy は、ユーザーが Android デバイスにさまざまな Linux ディストリビューションを迅速に展開できるようにする強力なツールで、ユーザーはモバイル デバイスで完全な Linux システムを体験できます。この記事では、LinuxDeploy の操作手順と注意事項を詳しく紹介し、読者がこのツールをより効果的に使用できるように、具体的なコード例を示します。操作手順: Linux のインストールDeploy: まず、インストールします

Win10 起動パスワードの F2 キーを押すのを忘れた場合の対処方法 Win10 起動パスワードの F2 キーを押すのを忘れた場合の対処方法 Feb 28, 2024 am 08:31 AM

おそらく多くのユーザーは、自宅に未使用のコンピュータを複数台持っており、長期間使用していなかったためにパワーオン パスワードを完全に忘れてしまったため、パスワードを忘れた場合の対処方法を知りたいと考えています。それでは、一緒に見てみましょう。 win10 起動パスワードの F2 キーを押し忘れた場合の対処方法 1. コンピューターの電源ボタンを押し、コンピューターの電源を入れるときに F2 キーを押します (コンピューターのブランドによって、BIOS に入るボタンが異なります)。 2. BIOS インターフェイスで、セキュリティ オプションを見つけます (コンピューターのブランドによって場所が異なる場合があります)。通常は上部の設定メニューにあります。 3. 次に、「SupervisorPassword」オプションを見つけてクリックします。 4. この時点で、ユーザーは自分のパスワードを確認できると同時に、その横にある [有効] を見つけて [無効] に切り替えることができます。

Huawei Mate60 Proのスクリーンショット操作手順の共有 Huawei Mate60 Proのスクリーンショット操作手順の共有 Mar 23, 2024 am 11:15 AM

スマートフォンの普及に伴い、スクリーンショット機能は携帯電話を日常的に使用する上で必須のスキルの 1 つになりました。 Huaweiの主力携帯電話の1つであるHuawei Mate60Proのスクリーンショット機能は、当然のことながらユーザーの注目を集めています。今日は、誰もがより便利にスクリーンショットを撮れるように、Huawei Mate60Pro携帯電話のスクリーンショットの操作手順を共有します。まず、Huawei Mate60Pro携帯電話はさまざまなスクリーンショット方法を提供しており、個人の習慣に応じて自分に合った方法を選択できます。以下は、一般的に使用されるいくつかのインターセプトの詳細な紹介です。

ラップトップは毎回シャットダウンする必要がありますか? ラップトップは毎回シャットダウンする必要がありますか? Feb 19, 2024 pm 12:09 PM

Windows ラップトップには休止状態とシャットダウンのオプションが付属しています。ラップトップをスリープ モードにすると、低電力モードになり、そのままの状態で作業を続けることができます。ラップトップをシャットダウンした場合は、すべてのプログラムと作業内容を閉じて、最初からやり直す必要があります。一日中ラップトップを使用せずに休憩したい場合は、スリープ モードまたは休止状態モードが良い選択肢です。ドアを閉めるのはどうですか?ラップトップは毎回シャットダウンする必要がありますか?確認してみましょう。ラップトップは毎回シャットダウンする必要がありますか?特に長期間使用しない場合は、エネルギーを節約し、デバイスの寿命を延ばすためにラップトップの電源を切ることをお勧めします。ただし、日中はラップトップをスリープ モードにしてタスクを続行することをお勧めします。

See all articles