汇总一下tp5 知识点

2024-06-05 16:32
文章标签 知识点 汇总 tp5 一下

本文主要是介绍汇总一下tp5 知识点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


原生sql执行
Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
多个数据库连接:
Db::connect($config)->query('select * from think_user where id=:id',['id'=>8]);   #$config是一个单独的数据库配置,支持数组和字符串,也可以是一个数据库连接的配置参数名。连接表名
table方法
Db::table('think_user')->where('id',1)->find();   #必须指定完整的数据表名,可以采用简化数据表方式 Db::table('__USER__')name方法
Db::name('user')->where('id',1)->find();           #设置了数据表前缀参数,即在database.php配置文件中配置了数据库前缀(prefix)
Db::name('user')->where('status',1)->select();助手函数db()
db('user')->where('id',1)->find();
db('user')->where('status',1)->select();
注意,db助手函数默认每次都会重新连接数据库,而使用Db::name或者Db::table方法的话都是单例的。db函数如果需要采用相同的链接,可以传入第三个参数,例如:
db('user',[],false)->where('id',1)->find();
db('user',[],false)->where('status',1)->select();
5.0.9版本后db助手函数默认不再强制重新连接。数据集分批处理
Db::table('think_user')->chunk(100, function($users) {foreach ($users as $user) {//}
});添加数据
$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);
insert 方法添加数据成功返回添加成功的条数,insert 正常情况返回 1。
需要返回新增数据的自增主键,可使用getLastInsID方法:
$userId = Db::name('user')->getLastInsID();
或者直接使用insertGetId方法新增数据并返回主键值:
Db::name('user')->insertGetId($data);Db 类的 insertAll 方法传入需要添加的数据即可
$data = [['foo' => 'bar', 'bar' => 'foo'],['foo' => 'bar1', 'bar' => 'foo1'],['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);getTableInfo方法
使用getTableInfo可以获取表信息,信息类型 包括 fields,type,bind,pk,以数组的形式展示:
Db::getTableInfo('think_user');              // 获取`think_user`表所有信息
Db::getTableInfo('think_user', 'fields');    // 获取`think_user`表所有字段
Db::getTableInfo('think_user', 'type');      // 获取`think_user`表所有字段的类型
Db::getTableInfo('think_user', 'pk');        // 获取`think_user`表的主键子查询
buildSql构造子查询
$subsql = Db::table('think_work')->where(['status'=>1])->field('artist_id,count(id) count')->group('artist_id')->buildSql();
子查询链表
Db::table('think_user')->alias('a')->join([$subsql=> 'w'], 'a.artist_id = w.artist_id')->select();select方法的参数为false的时候,表示不进行查询只是返回构建SQL,例如:
$subQuery = Db::table('think_user')->field('id,name')->where('id','>',10)->select(false); fetchSql(true)获取CURD操作的sql 
$result = Db::table('think_user')->fetchSql(true)->find(1);force 方法用于数据集的强制索引
Db::table('think_user')->force('user')->select();数据库的CURD操作事件支持
事件	描述
before_select	select查询前回调
before_find	    find查询前回调
after_insert	insert操作成功后回调
after_update	update操作成功后回调
after_delete	delete操作成功后回调
查询事件仅支持find、select、insert、update和delete方法。注册数据库查询事件
Query::event('after_insert','callback');
Query::event('before_select',function($options,$query){// 事件处理return $result;
});控制器中
public function _initialize()
{parent::_initialize();//注册一个在select查询前的事件Query::event('before_select', function($options, $query){echo 'this is query event ';});
}事务
自动处理:Db::transaction(function(){Db::table('think_user')->find(1);Db::table('think_user')->delete(1);});手动控制:
Db::startTrans();
try{Db::table('think_user')->find(1);Db::table('think_user')->delete(1);// 提交事务Db::commit();    
} catch (\Exception $e) {// 回滚事务Db::rollback();
}数据集(think\Collection)
5.0.5 原生查询不支持返回数据集对象
配置数据库的resultset_type参数
'resultset_type' => 'collection',   // 数据集返回类型
和数组无差别用法,并且另外封装了一些额外的方法。
判断数据集是否为空,不能直接使用empty判断,而必须使用数据集对象的isEmpty方法判断:
$users = Db::name('user')->select();
if($users->isEmpty()){echo '数据集为空';
}
https://www.kancloud.cn/manual/thinkphp5/150164模型调用
$user = User::get(1);   		  // 静态调用
$user = new User;      		      // 实例化模型
$user = Loader::model('User');    // 使用 Loader 类实例化(单例)
$user = model('User');			  // 使用助手函数`model`添加
$user           = new User;
$user->name     = 'thinkphp';
$user->save();
// 获取自增ID
echo $user->id;$user = new User;
$list = [['name'=>'thinkphp','email'=>'thinkphp@qq.com'],['name'=>'onethink','email'=>'onethink@qq.com']
];
$user->saveAll($list);静态调用create方法创建添加并写入:
$user = User::create(['name'  =>  'thinkphp','email' =>  'thinkphp@qq.com'
]);
echo $user->name;
echo $user->email;
echo $user->id; // 获取自增ID
和save方法不同的是,create方法返回的是当前模型的对象实例。// 使用model助手函数实例化User模型
$user = model('User');
// 模型对象赋值
$user->data(['name'  =>  'thinkphp','email' =>  'thinkphp@qq.com'
]);
$user->save();进行批量新增:
$user = model('User');
// 批量新增
$list = [['name'=>'thinkphp','email'=>'thinkphp@qq.com'],['name'=>'onethink','email'=>'onethink@qq.com']
];
$user->saveAll($list);URL生成
使用 \think\Url::build() 方法
Url::build('地址表达式',['参数'],['URL后缀'],['域名'])使用系统提供的助手函数url()
url('地址表达式',['参数'],['URL后缀'],['域名'])生成控制器类
>php think make:controller index/Blog            #生成index模块的Blog控制器类库文件
>php think make:controller index/Blog --plain    #仅生成空的控制器生成模型类
>php think make:model index/Blog				 #生成的模型类文件 生成类库映射文件optimize:autoload
>php think optimize:autoload					 #在runtime目录下面生成classmap.php文件,生成的类库映射文件会扫描系统目录和应用目录的类库。生成路由缓存optimize:route
>php think optimize:route						 #在runtime目录下面生成route.php文件,生成的路由缓存文件仅仅支持在应用的路由配置文件中定义的路由(包括方法定义和配置定义)。清除缓存文件clear
>php think clear								 #不带任何参数调用clear命令的话,会清除runtime目录(包括模板缓存、日志文件及其子目录)下面的所有的文件,但会保留目录。
>php think clear --path d:\www\tp5\runtime\log\  #清除log目录下面的文件生成配置缓存optimize:config
>php think optimize:config					     #在runtime目录下面生成init.php文件,生成配置缓存文件后,应用目录下面的config.phpcommon.php以及tags.php不会被加载,被runtime/init.php取代
>php think optimize:config index                 #在runtime/index目录下面生成init.php文件,生成后,index模块目录下面的config.phpcommon.php以及tags.php不会被加载,被runtime/index/init.php取代生成数据表字段缓存optimize:schema
>php think optimize:schema					     #生成当前数据库配置文件中定义的数据表字段缓存
>php think optimize:schema --db demo			 #在runtime/schema目录下面按照数据库demo生成字段缓存文件。
>php think optimize:schema --table think_user	 #生成或更新数据表字段缓存
>php think optimize:schema --table demo.think_user扩展
在应用中添加扩展函数文件:
1.在应用目录下面增加一个助手函数文件(文件名随意,例如application/helper.php)注意,尽量避免直接修改核心的helper.php文件。
2.然后,在应用配置文件中设置:
'extra_file_list'  => [ APP_PATH . 'helper.php', THINK_PATH . 'helper.php'],  // 扩展函数文件添加应用函数
如果需要给当前应用添加函数,只需要在应用的公共文件(application/common.php)中定义需要的函数即可,系统会自动加载,如果你需要增加新的函数文件,例如需要增加一个sys.php,那么就需要和上面一样设置extra_file_list配置:
// 扩展函数文件
'extra_file_list'  => [ APP_PATH . 'helper.php', THINK_PATH . 'helper.php', APP_PATH . 'sys.php'],引入类库
1.$foo = new \first\second\Foo();
2.Loader::import()
Loader::import('org.util.array');
Loader::import('@.util.upload');	    //@	表示当前模块类库包Loader::import('first.second.Foo');
$foo = new \Foo();Loader::import('qrcode', EXTEND_PATH);  // 引入 extend/qrcode.php
import('qrcode', EXTEND_PATH);          // 助手函数手动抛出异常
使用\think\Exception类来抛出异常
throw new \think\Exception('异常消息', 100006);  使用系统提供的助手函数来简化处理:
exception('异常消息', 100006);抛出 HTTP 异常
使用\think\exception\HttpException类来抛出异常
throw new \think\exception\HttpException(404, '异常消息', null, [参数]);
助手函数abort简化HTTP异常的处理,例如:
abort(404, '异常消息', [参数])Traits引入
为类似 PHP 的单继承语言而准备的代码复用机制.
PHP5.4版本不支持trait的自动加载,必须手动导入trait类库,PHP版本大于5.5的话,则可以省略load_trait函数引入trait。

 

这篇关于汇总一下tp5 知识点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1033585

相关文章

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

枚举相关知识点

1.是用户定义的数据类型,为一组相关的常量赋予有意义的名字。 2.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,在编译期间可检查错误。 3.enum定义的枚举类有什么特点。         a.定义的enum类型总是继承自java.lang.Enum,且不能被继承,因为enum被编译器编译为final修饰的类。         b.只能定义

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

【详细介绍一下GEE】

GEE(Google Earth Engine)是一个强大的云计算平台,它允许用户处理和分析大规模的地球科学数据集,如卫星图像、气候模型输出等。以下是对GEE用法的详细介绍: 一、平台访问与账户设置 访问GEE平台: 用户可以通过访问Google Earth Engine的官方网站来开始使用GEE。 创建账户: 用户需要注册并登录Google账户,然后申请访问GEE平台。申请过程可能需要提

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【反射知识点详解】

Java中的反射(Reflection)是一个非常强大的机制,它允许程序在运行时检查或修改类的行为。这种能力主要通过java.lang.reflect包中的类和接口来实现。 通过反射,Java程序可以动态地创建对象、调用方法、访问字段,以及获取类的各种信息(如构造器、方法、字段等)。 反射的用途 反射主要用于以下几种情况: 动态创建对象:通过类的Class对象动态地创建其实例。访问类的字段

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。