ThinkPhp开发文档(基础篇)
2021/7/20 11:05:54
本文主要是介绍ThinkPhp开发文档(基础篇),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
ThinkPhp开发文档
查询
案例
//获取user列表 public function get_user_list() { //1.首先获取用户id,用户已有id、邮箱等属性,在Base类中已经进行过邮箱校验,其余类继承Base即可 $user_id = Session::get('user_id'); //2.定义列表,运用框架语法查询,注意,卫星系统一共有三个库,frss(主库)、fess_csg(副库)、frss_ific(副库) //调用主库案例 $user_list = Db::table('user') //默认是主库 ->field('id','name','dapartment') //查询哪些列 ->where('del','=','0') // 查询条件 ->where('id','<>',$user_id) //查询条件,条件之间默认为and链接 ->select(); //定义查询语句 return json ('code'>=0,'msg'=>'查询成功',date=>$user_list) //返回以json的格式返回,包括code、msg、data //此为副库查询案例 /* $data=Db::connect('db_cfg') ->table('correspondence_template') ->field('id,template_name,hanjianleixing,shouhanjigou,jigoudizhi,mubanyuyan,text') ->select(); return json(['code' => 0, 'msg' => '查询成功','data'=>$data]); */ }
注意点
- 首先获取用户id,用户已有id、邮箱等属性,在Base类中已经进行过邮箱校验,其余类继承Base即可
- 定义列表,运用框架语法查询,注意,卫星系统一共有三个库,frss(主库)、fess_csg(副库)、frss_ific(副库)
- 返回以json的格式返回,包括code、msg、data
- find方法查询结果不存在,返回null,否则返回结果数组
- select方法查询多条数据
更新
案例
public function update_user() { $share_id=Request::param('share_id'); //Request::param('a') 获取只能获取单个参数,$data = Request::only(['a','b'])获取多个参数 $id=Request::param('id'); $user_id=Session::get('user_id'); $data=Db::table('correspondence_manage') ->where([ 'id'=>$id, 'user_id'=>$user_id, ]) ->update([ 'share_to_user_id'=>$share_id ]); return json(['code'=>0,'msg'=>'设置成功']); }
注意
- Request::param('a') 获取只能获取单个参数,$data = Request::only(['a','b'])获取多个参数
- 其他同上
删除
案例
public function del_file(){ $file_id=Request::param('id'); $user_id=Session::get('user_id'); $file_path=Db::table('coordination_task_file') ->where([ ['id','=',$file_id], ['user_id','=',$user_id] ]) ->find(); if($file_path){ @unlink($file_path['ture_path']); //当添加到PHP中的表达式时,该表达式可能生成的任何错误消息都将被忽略 Db::table('coordination_task_file')->delete($file_id); return json(['code'=>0,'msg'=>'删除成功']); } return json(['code'=>-1,'msg'=>'删除失败。']); }
注意
- 当添加到PHP中的表达式时,该表达式可能生成的任何错误消息都将被忽略
- 一般情况下,业务数据不建议真实删除数据,系统提供了软删除机制(模型中使用软删除更为方便)。
// 软删除数据 使用delete_time字段标记删除 Db::name('user') ->where('id', 1) ->useSoftDelete('delete_time',time()) ->delete();
新增
案例
public function new_simulation_info() { $data=Request::only([ 'simulation_group', 'simulation_name', 'coordination_type', ]); $data['user_id']=Session::get('user_id'); $data['add_date']=date("Y-m-d H:i:s", time()); $simulation_id=Db::table('coordination_task')->insertGetId($data); return json(['code'=>0,'msg'=>'添加成功','id'=>$simulation_id]); }
注意
- insert 方法添加数据成功返回添加成功的条数,通常情况返回 1
- insertGetId 方法添加数据成功返回添加数据的自增主键
$userId = Db::name('user')->insertGetId($data);
- insertAll方法添加数据成功返回添加成功的条数
$data = [ ['foo' => 'bar', 'bar' => 'foo'], ['foo' => 'bar1', 'bar' => 'foo1'], ['foo' => 'bar2', 'bar' => 'foo2'] ]; Db::name('user')->insertAll($data);
- 如果批量插入的数据比较多,可以指定分批插入,使用limit方法指定每次插入的数量限制。
$data = [ ['foo' => 'bar', 'bar' => 'foo'], ['foo' => 'bar1', 'bar' => 'foo1'], ['foo' => 'bar2', 'bar' => 'foo2'] ... ]; // 分批写入 每次最多100条数据 Db::name('user') ->limit(100) ->insertAll($data);
- update方法返回影响数据的条数,没修改任何数据返回 0
Db::name('user') ->where('id', 1) ->data(['name' => 'thinkphp']) ->update();
- 如果update方法和data方法同时传入更新数据,则update方法为准。
查询表达式
表达式 | 含义 | 快捷查询方法 |
---|---|---|
= | 等于 | |
<> | 不等于 | |
> | 大于 | |
>= | 大于等于 | |
< | 小于 | |
<= | 小于等于 | |
[NOT] LIKE | 模糊查询 | whereLike/whereNotLike |
[NOT] BETWEEN | (不在)区间查询 | whereBetween/whereNotBetween |
[NOT] IN | (不在)IN 查询 | whereIn/whereNotIn |
[NOT] NULL | 查询字段是否(不)是NULL | whereNull/whereNotNull |
[NOT] EXISTS | EXISTS查询 | whereExists/whereNotExists |
[NOT] REGEXP | 正则(不)匹配查询(仅支持Mysql) | |
[NOT] BETWEEN TIME | 时间区间比较 | whereBetweenTime |
> TIME | 大于某个时间 | whereTime |
< TIME | 小于某个时间 | whereTime |
>= TIME | 大于等于某个时间 | whereTime |
<= TIME | 小于等于某个时间 | whereTime |
EXP | 表达式查询,支持SQL语法 | whereExp |
find in set | FIND_IN_SET查询 | whereFindInSet |
where
案例
Db::table('think_user') ->where('id','>',1) ->where('name','thinkphp') ->select();
索引数组
// 传入数组作为查询条件Db::table('think_user')->where([ ['name','=','thinkphp'], ['status','=',1]])->select();
alias
- alias用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等。
Db::table('think_user')->alias('a')->join('think_dept b ','b.user_id= a.id')->select();
- 可以传入数组批量设置数据表以及别名
Db::table('think_user')->alias(['think_user'=>'user','think_dept'=>'dept'])->join('think_dept','dept.user_id= user.id')->select();
field
- 指定列
Db::table('user')->field('id,title,content')->select();
注意
- 除了select方法之外,所有的查询方法,包括find等都可以使用field方法。
- 字段排除,如果我希望获取排除数据表中的
content
字段(文本字段的值非常耗内存)之外的所有字段值,我们就可以使用field方法的排除功能,例如下面的方式就可以实现所说的功能:
Db::table('user')->withoutField('content')->select();
- 则表示获取除了content之外的所有字段,要排除更多的字段也可以:
Db::table('user')->withoutField('user_id,content')->select();//或者用Db::table('user')->withoutField(['user_id','content'])->select();
limit限制结果数量
- 例如获取满足要求的10个用户,如下调用即可:
Db::table('user') ->where('status',1) ->field('id,name') ->limit(10) ->select();
- limit方法也可以用于写操作,例如更新满足要求的3条数据:
Db::table('user')->where('score',100)->limit(3)->update(['level'=>'A']);
- 如果用于insertAll方法的话,则可以分批多次写入,每次最多写入limit方法指定的数量。
Db::table('user')->limit(100)->insertAll($userList);
- 分页查询
Db::table('article')->limit(10,25)->select();
聚合查询
方法 | 说明 |
---|---|
count | 统计数量,参数是要统计的字段名(可选) |
max | 获取最大值,参数是要统计的字段名(必须) |
min | 获取最小值,参数是要统计的字段名(必须) |
avg | 获取平均值,参数是要统计的字段名(必须) |
sum | 获取总分,参数是要统计的字段名(必须) |
query方法原生查询
Db::query("select * from think_user where status=:id", ['id' => 1]);
- 如果你当前采用了分布式数据库,并且设置了读写分离的话,
query
方法默认是在读服务器执行,而不管你的SQL语句是什么。 - 使用原生查询有sql注入风险
查询事件
事件 | 描述 |
---|---|
before_select | select 查询前回调 |
before_find | find 查询前回调 |
after_insert | insert 操作成功后回调 |
after_update | update 操作成功后回调 |
after_delete | delete 操作成功后回调 |
事务
- 事务四要素原子性、一致性、隔离性、持久性
- 最简单的方式是使用 transaction方法操作数据库事务,当闭包中的代码发生异常会自动回滚,例如:
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();}
一些疑惑
-
var_dump (var,var,bar);
要注意一点,用var_dump里面的变量必须是存在的,如果变量存在但值是空的就会返回false;没有变量则返回NULL.他自己就有输出的功能。不必加其他的输出函数。
-
在PHP里面->和=>完全不同的,->用来引用对象的成员(属性与方法),=>只用来数组赋值,下面的例子代码有利于理解:
$arr``=[``'a'``=>123,``'b'``=>456];``//数组初始化 ``echo` `$arr``[``'a'``];``//数组引用 ``print_r(``$arr``);``//查看数组 ``class` `A{ ``public` `$a``=123; ``public` `$b``=456; ``} ``$obj``=``new` `A(); ``echo` `$obj``->a;``//对象引用 ``print_r(``$obj``);``//查看对象
这篇关于ThinkPhp开发文档(基础篇)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享
- 2024-11-01开源 PHP 商城项目 CRMEB 安装和使用教程
- 2024-11-01用php和mysql写无限分类,有哪几种方法-icode9专业技术文章分享
- 2024-10-31php数据分表导出时部分数据无法导出什么原因-icode9专业技术文章分享
- 2024-10-30有经验的 PHP 开发者学习一门新的编程语言,有哪些推荐的有前景的语言-icode9专业技术文章分享
- 2024-10-21php 检测图片是否篡改过-icode9专业技术文章分享
- 2024-10-20fruitcake/php-cors 该怎么使用-icode9专业技术文章分享
- 2024-10-18PHP7.1可以使用哪个版本的swoole-icode9专业技术文章分享