Thinkphp5でデータベースを操作し、追加、削除、変更、クエリを行うにはどうすればよいですか?次の記事では、Thinkphp5 でデータベースを追加、削除、変更、クエリする方法について詳しく説明します。
#[関連チュートリアルの推奨事項] :thinkphp 標準データ テーブルの設計:
時間フィールドの作成: create_time
時間フィールドの更新:update_time
削除時刻フィールド: delete_time
以下に示すように、型として int を選択します:
thinkphp Framework]
1. モデル フォルダーを作成しますアプリケーション フォルダーの下のセカンダリ オブジェクト ディレクトリに、model という名前の新しいフォルダーを作成します。このフォルダーは、以下に示すように、対応するコントローラーとビューのディレクトリは同じレベルにあります。表名 pre_user ---------------> 模型名 User.php 表名 pre_user_info ---------------> 模型名 UserInfo.php)。 2. モデルを定義します。model
<?php namespace app\index\model; use think\Model; use think\Db; class User extends Model{ /** * 定义变量 * 1.变量名称应与数据表中的字段名相同 * 2.此处可根据需求省略,因为如果没有,thinkphp会自动在数据表中寻找的对应字段名 */ public $username; public $password; } ?>3 . データ モデルの定義名がテーブル名と一致しない場合は、次のように追加の定義と宣言が必要です:
<?php namespace app\index\model; use think\Model; use think\Db; class User extends Model { protected $table = "admin_user";//指定数据表名 protected $pk = 'id'; //指定主键的字段 } ?>3. モデルの呼び出し方法 model
//导入定义的数据模型类
use \app\index\model\User;
//方法一:
$res = User::get(1);
//方法二:
$user = new User;
$res = $user::get(1);
//方法三:
use think\Loader;
$user = Loader::model("User");
$res = $user::get(1);
//方法四:
$user = model("User");
$res = $user::get(1);
4. クエリ操作
get レコードの取得
$res = User::get(1);
all 複数のレコードの取得
1. パラメータは渡されません$result = User::all(); //查询出所有记录2. パラメータは n、n は正の整数
$result = User::all(1); //查询出id为1的记录3. パラメータは 'n1, n2, n3...'
$result = User::all('7, 8, 9, 10'); //查询出id为7、8、9、10的4条记录4. パラメータは [n1 、n2、n3...]
$result = User::all([7, 8, 9, 10]); //查询出id为7、8、9、10的4条记录
find 特定の項目をクエリします
$res = User::where('id','1')->field('name')->find();
に等しくありません->where( 'id','neq',1)##複数のクエリを選択
$res = User::where('id','1')->field('name')->limit(2)->order('id DESC')->select();
$res = User::where('id','1')->value('name');
$res = $res->toArray();
//查询总条数
$res = User::count();
//按条件统计条数
$res = User::where('id','>',3)->count();
whereTime()時間条件クエリ
1に変換します。今日の情報を取得します
db('table')->whereTime('c_time', 'today')->select(); //也可以简化为下面方式 db('table')->whereTime('c_time', 'd')->select();
2. 昨日の情報を取得します
db('table')->whereTime('c_time', 'yesterday')->select();
3. 今週の情報を取得します
db('table')->whereTime('c_time', 'week')->select(); //也可以简化为下面方式 db('table')->whereTime('c_time', 'w')->select();
4. 今月の情報を取得します
db('table')->whereTime('c_time', 'month')->select(); //也可以简化为下面方式 db('table')->whereTime('c_time', 'm')->select();
5.先月の情報を取得
db('table')->whereTime('c_time','last month')->select();
6. 今年の情報を取得
db('table')->whereTime('c_time', 'year')->select(); //也可以简化为下面方式 db('table')->whereTime('c_time', 'y')->select();
7. 昨年の情報を取得
db('table')->whereTime('c_time','last year')->select();
8. 日付間隔クエリ
//根据时间戳查询今天到后天 db('table')->whereTime('time', 'between', [strtotime(date('Y-m-d')), strtotime(date('Y-m-d', strtotime('+2 day')))])->select(); 根据日期查询今天到后天 db('table')->whereTime('time', 'between', ['2020-3-28', '2020-3-30'])->select();
5 . 操作を追加します
1. create() メソッドを使用して add
$res = User::create([ 'name' => '安阳', 'age' => 23, 'sex' => 1, 'password' => '123456' ]);
2. データを追加し、追加された主キーを返します
$uid=UserModel::create([ 'name' => '安阳', 'age' => 23, 'sex' => 1, 'password' => '123456' ])->id;
また、insertGetId メソッドを使用することもできます
$uid = User::insertGetId([ 'name' => '安阳', 'age' => 23, 'sex' => 1, 'password' => '123456' ]);
3. インスタンス化によって追加
$user = new User; $user->name = '安阳'; $user->age = 23; $user->save();
4 、挿入されたフィールドをインスタンス化によってフィルタリングし、挿入された行の数を返します
$user = new User; $data = [ 'name' => '安阳', 'age' => 23, 'email' => '123456@qq.com' ]; //只有name和age字段会写入 $res = $user->allowField(['name', 'age'])->save($data);
5モデルは、allowField() を使用して、非データ テーブル フィールドのデータをフィルターします
//定义模型对象,并传入post数据 $user = new User($_POST); //过滤post数组中的非数据表字段数据 $user->allowField(true)->save();
6. モデルは、allowField() を使用して、特定のフィールドの書き込みを指定します
$user = new User; // post数组中只有name和email字段会写入 $user->allowField(['name','email'])->save($_POST, ['id' => 1]);
7. saveAll() を使用しますバッチ追加の場合
#user = new User; $list = [ ['name'=>'安阳','email'=>'thinkphp@qq.com'], ['name'=>'小柒','email'=>'12345678@qq.com'] ]; $user->saveAll($list);
DB クラスの insertAll() メソッドを使用して、正常に追加された項目の数を返すこともできます
$res = User::insertAll([ 'name' => '安阳', 'age' => 23, 'sex' => 1, 'password' => '123456' ]);
補足、その他のフィルタリング方法フィールド:1. DB 操作では、strict を使用して厳密なフィールド チェックをオフにすることができます
Db::name(‘user’)->strict(false)->insert($data);2. PHP の unset( ) メソッドを使用すると変数が破壊されます
unset($data[‘file’]);6. saveAll は複数のデータを追加し、オブジェクト リストを返します
$user = new User; $data = [ [ 'name' => '安阳', 'age' => 20, 'email' => '123456@qq.com' ], [ 'name' => '小柒', 'age' => 25, 'email' => 'ap555@qq.com' ] ]; $res = $user->allowField(['name', 'age'])->saveAll($data);
6. 更新操作
1. update は影響を受ける行の数を返します
$res = User::where(['id'=>1])->update(['name'=>'安阳']);
2. setField はフィールドを個別に更新します
User::where('id',1)->setField('name','安阳');
3. setInc
//setInc('money',10)表示将money字段加上10 User::where(['id'=>1])->setInc('money', 10);
4. setDec
//setDec('money',10)表示将money字段减去10 User::where(['id'=>1])->setDec('money', 10);
5. バッチ更新ではデータに主キーが含まれている必要があり、更新オブジェクトを返しますlist
$user = new User; $res = $user->saveAll([ ['id'=>1, 'name' => '安阳'], ['id'=>2, 'name' => '小柒'] ]);
7. 削除操作
1. 主キーを渡し、影響を受ける行の数を返します
$res = User::destroy(1);
2. 条件を渡し、影響を受ける行の数を返します影響を受ける行
$res = User::destroy(['name'=>'安阳']);
3。条件付き削除は影響を受ける行の数
$res = User::where(['id'=>1])->delete();
8 を返します。トランザクション
1。トランザクション処理を自動的に制御します
Db::transaction(function(){ Db::table('order')->where(['id'=>1])->delete(); Db::table('user')->where('id'=>1)->setInc('money',10); });
2。手動でトランザクションを制御します
Db::startTrans();//启动事务 try { Order::where(['id'=>1])->delete(); User::where('id'=>1)->setInc('money',10); Db::commit();//提交事务 } catch (Exception $e) { Db::rollback(); //回滚 }
9. モデルモデルゲッター
リーダーの命名規則は次のとおりです:->属性名 Attr## のキャメルケース名を取得します#
<?php namespace app\index\model; use think\Model; class User extends Model { //获取器:将性别的012修改为男、女、未知 返回 public function getSexAttr($val) { switch ($val) { case 1: return '男'; case 2: return '女'; default: return '未知'; } } //获取器:格式化时间戳后返回 public function getUpdateTimeAttr($val){ if(!empty($val)){ //如果是时间戳,就格式化 if(!strtotime($val)) { return date('Y-m-d H:i:s',$val); }else{ return $val; } }else{ return ''; } } }追加説明: strtotime() は、英語テキストの日付と時刻の記述を Unix タイムスタンプに解析し、成功した場合はタイムスタンプを返し、そうでない場合は FALSE を返します (PHP 5.1.0 より前では、この関数は失敗すると -1 を返します)十、model模型的修改器
<?php namespace app\index\model; use think\Model; class User extends Model { //修改器 public function setTimeAttr() { return time(); } /** 修改器:对密码字段加密之后存储 * $val 第一个参数是密码 * $data 第二个参数是添加的数据(可选) */ public function setPasswordAttr($val,$data){ if($val === '') { return $val; }else{ return md5($val.$data['email']); } } }十一、model模型的自动完成
auto 新增及更新的时候,自动完成的属性数组
insert 仅新增的时候,自动完成的属性数组
update 仅更新的时候,自动完成的属性数组1、自动完成
<?php namespace app\index\model; use think\Model; class User extends Model { //添加和修改时,都会自动完成的字段 protected $auto = ['addtime']; public function setAddtimeAttr(){ return time(); } }2、添加数据时,自动完成
<?php namespace app\index\model; use think\Model; class User extends Model { // 新增 自动完成 protected $insert = ['addtime']; public function setAddtimeAttr(){ return time(); } }3、更新数据时,自动完成:
<?php namespace app\index\model; use think\Model; class User extends Model { // 更新 自动完成 protected $update = ['addtime']; public function setAddtimeAttr(){ return time(); } }十二、自动完成时间戳
在数据库配置文件database.php中,有下列这项配置:
//自动写入时间戳字段 'auto_timestamp' => false, //如果开启(设置为true),则会自动完成所有表的时间戳,但是不建议这样,只在需要的地方设置更安全。例如对用户表的时间戳自动完成,就在User的model中设置:
<?php namespace app\index\model; use think\Model; class User extends Model{ //开启自动完成时间戳功能 protected $autoWriteTimestamp = true; //开启后, //添加数据时,默认自动完成的字段是:create_time和update_time //修改数据时,默认自动完成的字段是:update_time //如果数据表里不是这两个字段,则会报错。需要进行如下修改: protected $createTime = 'addtime';//修改默认的添加时间字段 protected $updateTime = 'updtime';//修改默认的修改时间字段 protected $updateTime = false;//当不需要这个字段时设置为false }Thinkphp更新时,自动更新update_time字段时间戳的方法:
1、使用update
User::update(['name'=>'安阳'],['id'=>1]);Thinkphp中update方法的源代码如下:
/** * 更新数据 * @access public * @param array $data 数据数组 * @param array $where 更新条件 * @param array|true $field 允许字段 * @return $this */ public static function update($data = [], $where = [], $field = null) { $model = new static(); if (!empty($field)) { $model->allowField($field); } $result = $model->isUpdate(true)->save($data, $where); return $model; }2、使用save
$user=new User; $user->isUpdate(true)->save(['name'=>'安阳'],['id'=>1]);
十三、软删除
什么是软删除?
当删除某些记录时,有时我们需要假删除,只通过修改某个字段状态来标记该记录已删除,但实际上,数据库中还是存在这些记录的。假删除的应用场景还是比较多的,例如支付宝的收款记录,我们在APP上删除后,就不会再显示出来,你是不是以为真的删掉了,不会再留下任何痕迹?非也,非也,删除支付宝收款记录只是软删除,在支付宝的数据库中,实际上还保留有这些收款记录,如果你的收款涉嫌违规或者触犯法律,警方还是能通过支付宝的网警后台查看到的。
1、开启软删除
<?php namespace app\index\model; use think\Model; use traits\model\SoftDelete;//引入软删除的类 class Order extends Model{ //使用软删除 //删除时,默认更新的字段是delete_time use SoftDelete; //如果数据表里不是delete_time这个字段,则会报错。需要进行如下修改: protected $deleteTime = 'deltime'; }2、 控制器里软删除,返回影响的行数
$res = Order::destroy(1);执行删除后,就会更新delete_time字段,如果update_time字段也开启了自动完成,也会更新update_time字段。
3、如果开启了软删除,需要真正地删除数据,而不做软删除,用下面的方法
//destory()第二个参数传递true $res = Order::destroy(1,true); //delete()参数传递true $orderData = Order::get(1); $orderData ->delete(true);4、查询已软删除的数据
$res = Order::withTrashed(true)->find(1);5、查询仅包含已软删除的数据
$res = Order::onlyTrashed()->select();推荐学习:《PHP视频教程》
以上がThinkphp5 でデータベースを追加、削除、変更、クエリする方法を詳しく説明した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHP是一种非常流行的编程语言,而CodeIgniter4是一种常用的PHP框架。在开发Web应用程序时,使用框架是非常有帮助的,它可以加速开发过程、提高代码质量、降低维护成本。本文将介绍如何使用CodeIgniter4框架。安装CodeIgniter4框架CodeIgniter4框架可以从官方网站(https://codeigniter.com/)下载。下

如何使用PHP在Linux环境下进行数据库操作在现代web应用程序中,数据库是必不可少的组成部分。PHP是一种流行的服务器端脚本语言,它可以与各种数据库进行交互。本文将介绍如何在Linux环境下使用PHP脚本进行数据库操作,并提供一些具体的代码示例。步骤1:安装必要的软件和依赖项在开始之前,我们需要确保在Linux环境下安装了PHP和相关的依赖项。通常情况下

宝塔面板是一种功能强大的面板软件,它可以帮助我们快速部署、管理和监控服务器,尤其是经常需要进行网站搭建、数据库管理以及服务器维护的小型企业或个人用户。在这些任务中,MySQL数据库管理在很多情况下是一个重要的工作。那么如何使用宝塔面板进行MySQL管理呢?接下来,我们将逐步介绍。第一步:安装宝塔面板在开始使用宝塔面板进行MySQL管理之前,首先需要安装宝塔面

如何使用thinkorm来提高数据库操作效率随着互联网的迅速发展,越来越多的应用程序需要进行大量的数据库操作。在这个过程中,数据库操作的效率问题就变得尤为重要。为了提高数据库操作效率,我们可以使用thinkorm这个强大的ORM框架来进行数据库操作。本文将介绍如何使用thinkorm来提高数据库操作效率,并通过代码示例来说明。一、什么是thinkormthi

使用PDO进行数据库操作:PHP的一个更好的方式在Web开发中,使用数据库进行数据存储、管理和查询是非常常见的。而PHP作为一种广泛应用于Web开发的语言,自然也提供了丰富的数据库操作方式。在PHP中,可以使用MySQLi、PDO以及其他扩展库来进行数据库操作。其中,PDO是一种非常常用的数据库操作方式,相比于其他方式有更多的优点。本文将介绍什么是PDO,以

如何在Symfony框架中使用DoctrineORM进行数据库操作引言:Symfony框架是一个流行的PHP框架,它提供了许多强大的工具和组件,用于快速而简单地构建Web应用程序。其中一个关键的组件是DoctrineORM,它提供了一种优雅的方式来处理数据库操作。本文将详细介绍在Symfony框架中如何使用DoctrineORM来进行数据库操作。我们将

如何使用Flask-SQLAlchemy进行数据库操作Flask-SQLAlchemy是一种方便的扩展,可以在Flask应用中操作数据库。它提供了简单的API,以减少开发人员的工作量,并且与Flask框架无缝集成。本文将介绍如何使用Flask-SQLAlchemy进行数据库操作并提供代码示例。安装Flask-SQLAlchemy首先,需要安装Flask-SQ

如何使用Go语言进行数据库操作引言:Go语言是一种高效且简洁的编程语言,拥有强大的并发能力和优秀的性能表现。在开发过程中,与数据库的交互是一个非常重要的环节。本文将介绍如何使用Go语言进行数据库操作,包括连接数据库、CRUD操作以及事务处理等。一、连接数据库在Go语言中,我们可以使用各种数据库驱动来连接不同类型的数据库,如MySQL、PostgreSQL、S


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
