Thinkphp 整理备忘 杂记
1:输出变量函数 (手册目录:控制器-输出变量)
I('变量类型.变量名',['默认值'],['过滤方法'],['额外数据源'])
例:$title = I('post.title','','strip_tags');
2:判断是否是POST方式提交 (手册目录:控制器-请求类型)
(手册目录:附录-常亮参考)
IS_POST 是系统常亮,判断当前是否POST请求
例如: if (IS_POST){ ………… }
3: 分页
$User = M('User'); // 实例化User对象 $count = $User->where('status=1')->count();// 查询满足要求的总记录数 $Page = new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数(25) $show = $Page->show();// 分页显示输出 // 进行分页数据查询 注意limit方法的参数要使用Page类的属性 $list = $User->where('status=1')->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select(); $this->assign('list',$list);// 赋值数据集 $this->assign('page',$show);// 赋值分页输出 $this->display(); // 输出模板
4:Thinkphp使用多个_string
下面这一种情况,出现两个_string,第一个string会把第二个给覆盖掉
$map["a"]=1;
$map["_string"]="条件1 or 条件2";
$map["_string"]="条件3";
解决办法:
$map["a"]=1;
$map["_string"]=" ( 条件1 or 条件2 ) ";
$map["_string"] . =" and 条件3";
生成的sql语句为:where a=1 AND ( (条件1 OR 条件2) and 条件3 )
5:大小写引起的错误
1- 读取配置 C('参数名称'),‘参数名称’的定义和调用时,最好都统一大写。
6:加载公共模块的service
$service = new \Common\Service\xxxxx();
7:CURD返回值
http://www.baiwar.com/post/thinkphp-database-operations-in-the-return-value.html
http://doc.thinkphp.cn/manual/curd.html
①、save()方法:
返回值是影响的记录数,如果返回false则表示更新出错,因此一定要用恒等来判断是否更新失败。
$result=$model->save(); if ($result === FALSE) { echo '修改失败'; } elseif($result === 0) { echo '未作任何修改'; } else { echo '修改成功'; }
②、Count 、Max、Min 、Avg 、Sum返回值
如果查询出错,返回值为false
查询成功,则返回对应的值。(如0、1、2)
③、find方法:
如果查询出错返回:false,
查询结果为空返回:NULL
查询成功则返回一个关联数组(键值是字段名或者别名)。
④、add()方法:
如果数据非法或者查询错误则返回false
如果是自增主键 则返回主键值,否则返回1
8:使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
M(“bus”)->where($where_ybj)->group('ordert')->count("DISTINCT orderid");
9:日志
$log = print_r($useramount_admin_info, true);
Log::record($log, 'DEBUG');
10:多表查询( 连接查询)
方法一:使用table()方法
$tables = "b_bus bus,b_waidiao_businfo wd"; $wdbl_map['bus.license'] = array('like',"%$select_license%"); $wdbl_map["wd.type"] = 1; $wdbl_map["wd.status"] = 1; $wdbl_map["_string"] = "wd.busid = bus.id"; $waidoao_disposable_bus_info_list = M()->table($tables)->where($wdbl_map)->field('bus .*')->group('wd.busid')->order("wd.id desc")->select();
方法二:使用join() 方法
11、TP5:扩展配置目录
extra
config('status.ps')
12:如何在一个模块Action中直接执行另一个模块的Action
A方法:用于在内部实例化控制器,调用格式:
A('[项目://][分组/]模块','控制器层名称')
A('Home/Common');
13:A方法、R方法、D方法、M方法的区别
A方法只是对象的实例化,而R方法是可以同时实例化对象里面的方法的。
Thinkphp 3.2.3 A()和R()方法都是对控制器类的实例化,R()方法比A()写法更简便,R()方法能直接返回类中方法返回的信息。R()方法里面封装了A()方法。
// A方法 $test_m=A("Home/Goods"); echo $test_m->test(); // R方法 echo R("Home/Goods/test");
我们在Model的数据模型里面,必然需要下面的两种方法,一个是D方法,一个是M方法,前者是实例化数据模型类,而后者则是实例化数据模型的父类。
14:Thinkphp中的 I 函数(Thinkphp3.2.3版本) I方法
I 函数的作用是获取系统变量,必要时还可以对变量值进行过滤及强制转化,I 函数的语法格式:
I('变量类型.变量名/修饰符',['默认值'],['过滤方法或正则'],['额外数据源'])
在PHP中获取变量值的方法有很多,比如:$_GET['变量名'],$_POST['变量名'],$_SESSION['变量名'],$_COOKIE['变量名'],$_SERVER['变量名'] 都可以获取相应的变量值,但在thinkphp中为了安全的原因建议统一使用 I 函数来获取变量值。例如:获取 URL 地址栏中参数 id 的值,在php中我们用 $_GET['id'] 来获取,在thinkphp中我们可以用 I('get.id') 来获取。同样的, $_POST['id'] 就用 I('post.id') 取代。
15:Thinkphp中的U函数(Thinkphp3.2.3版本)
U函数的作用是根据当前的URL设置生成对应的URL地址,使用U函数可以确保项目在移植过程中不受环境的影响。
U方法的定义规则如下(方括号内参数根据实际应用决定):
U('地址表达式',['参数'],['伪静态后缀'],['显示域名'])
16:getField用法总结
$User = M("User"); // 实例化User对象 // 获取ID为3的用户的昵称 $nickname = $User->where('id=3')->getField('nickname');
② 获取某个字段列
$User = M("User"); // 实例化User对象 // 获取status为1的用户的昵称列表 $nickname = $User->where('status=1')->getField('nickname',true);
第二个参数传入了true,返回的nickname则是一个数组,包含了所有满足条件的昵称列表。
如果需要限制返回结果数量,可以使用:
$nickname = $User->where('status=1')->getField('nickname',8);
③ 获取2个字段列表
$User = M("User"); // 实例化User对象 // 获取status为1的用户的昵称列表 $nickname = $User->where('status=1')->getField('id,nickname');
④:更多用法:http://www.thinkphp.cn/info/174.html
thinkphp5获取控制器名、模型名、方法名的代码
$request= \think\Request::instance();
dump($request->controller()); //获取控制器名
dump($request->module()); //获取模型名
dump($request->action()); //获取方法名
500、表达式中运算符条件的查询
SQL运算符 | 例子 | 实际查询条件 | |
---|---|---|---|
eq | = | $map['id'] = array('eq',100); | 等效于:$map['id'] = 100; |
neq | != | $map['id'] = array('neq',100); | id != 100 |
gt | > | $map['id'] = array('gt',100); | id > 100 |
egt | >= | $map['id'] = array('egt',100); | id >= 100 |
lt | < | $map['id'] = array('lt',100); | id < 100 |
elt | <= | $map['id'] = array('elt',100); | id <= 100 |
like | like | $map<'username'> = array('like','Admin%'); | username like 'Admin%' |
between | between and | $map['id'] = array('between','1,8'); | id BETWEEN 1 AND 8 |
not between | not between and | $map['id'] = array('not between','1,8'); | id NOT BETWEEN 1 AND 8 |
in | in | $map['id'] = array('in','1,5,8'); | id in(1,5,8) |
not in | not in | $map['id'] = array('not in','1,5,8'); | id not in(1,5,8) |
and(默认) | and | $map['id'] = array(array('gt',1),array('lt',10)); | (id > 1) AND (id < 10) |
or | or | $map['id'] = array(array('gt',3),array('lt',10), 'or'); | (id > 3) OR (id < 10) |
xor(异或) | xor | 两个输入中只有一个是true时,结果为true,否则为false,例子略。 | 1 xor 1 = 0 |
exp | 综合表达式 |
$map['id'] = array('exp','in(1,3,8)'); $map['sum'] = array('exp','`sum`+'.$shuliang); |
$map['id'] = array('in','1,3,8'); |