在TinkPHP中常用的辅助方法
在原生的sql语句中除了我们目前所使用的基本的操作,还有类似于group、where、order、limit等等这样的子句。
而在ThinkPHP也封装了相应的子句方法:
• where 表示限制查询的条件
• limit 表示限制输出的条数
• field 表示限制输出的字段
• order 表示按照指定的字段进行指定的排序
• group 表示按照指定的字段进行分组查询
一、where方法
作用:限制查询的条件。
在原生的sql语句中where的语法格式为:select 字段 from 表 where 条件;
在ThinkPHP中系统封装了一个where方法来实现在原生的sql语句中的where方法。
语法:
$model -> where(条件表达式); //在ThinkPHP中条件表达式支持字符串形式也支持数组形式,但是推荐使用字符串形式。
$model -> CURD操作;
案例:使用where方法查询部门表中部门id小于10的数据信息。
public function test(){
//实例化模型
$model = M('Dept');
//where方法
$model -> where('id < 10');
//查询操作
$result = $model -> select();
//打印
dump($result);
}
显示结果:
sql跟踪信息中的结果:
数据库信息:
在mysql中除了where子句之外,还有一个语法格式也能限制查询条件,这个语法是having语法。
问题:where子句和having子句有什么区别?
答:两个语句都表示限制查询条件,但是意义上有差异,where表示限制查询条件,但是要求条件中的字段必须是数据表中存在的字段;而having要求条件中的字段必须是结果集中存在的。
二、limit方法
在ThinkPHP中系统提供了一个limit方法来实现原生的sql语句限制条数的效果,具体的语法格式为:
第一种:$model -> limit(n); //字母n表示一个大于0的数字,代表着输出前n行记录
第二种:$model -> limit(起始位置,偏移量/长度); //表示从起始位置开始,往后查询指定长度的记录数,在实际使用时也支持写成$model -> limit('起始位置,偏移量/长度');
案例:使用limit方法来实现查询表中的数据限制。
第一种方法:$model -> limit(n);
//limit方法
public function test(){
//实例化模型
$model = M('Dept');
//limit方法
$model -> limit(2);//输出前2行记录
//查询操作
$result = $model -> select();
//打印
dump($result);
}
显示结果:
sql跟踪信息中的结果:
数据库信息:
第二种方法:$model -> limit(起始位置,偏移量/长度);
public function test(){
//实例化模型
$model = M('Dept');
//limit方法
$model -> limit(1,2);//输出从第二条记录开始到第三条记录
//查询操作
$result = $model -> select();
//打印
dump($result);
}
显示结果:
sql跟踪信息中的结果:
数据库中的信息:
三、field方法
原生的sql语句:select 字段 from 表。
语法格式:$model -> field('字段1,字段2,字段3,...[as 别名]');
案例:通过field方法查询id和name字段的记录。
则原生的sql语句为:select id,name from oa_dept;
//field方法
public function test(){
//实例化模型
$model = M('Dept');
//限制字段
$model -> field('id,name');//查询id和name字段中的记录
//查询操作
$result = $model -> select();
//打印
dump($result);
}
显示结果:
sql跟踪信息中的结果:
数据库中的信息:
说明:上述三个方法在父类模型中都是真实存在的。
四、order方法
原生的sql语句为:order by 字段 排序规则(升序asc/降序desc);
语法:
$model -> order('字段名 排序规则');
案例:使用order方法查询部门表中的数据,并且按照id进行降序排列。
原生的sql:select * from oa_dept order by id desc;
//order方法
public function test(){
//实例化模型
$model = M('Dept');
//order方法排序
$model -> order('id desc');//指定字段id,降序排列
//查询操作
$result = $model -> select();
//打印
dump($result);
}
显示结果:
sql跟踪信息中的结果:
数据库中的信息:
五、group方法
作用:查询分组。
在ThinkPHP中group分组可以使用group方法来实现:
$model -> group('字段名');
案例:使用group的方法去查询部门表,要求查询出部门名称和出现的次数。
原生的sql语句:select name,count(*) from oa_dept group by name;
使用group方法来实现:
因为上述的原生sql使用了限制字段和分组查询,所以在ThinkPHP中光靠group方法没有办法实现案例要求,还需要配合filed方法来实现。
//group方法
public function test(){
//实例化模型
$model = M('Dept');
//group方法
$model -> group('name');
//field方法
$model -> field('name,count(*)');
//查询操作
$result = $model -> select();
//打印
dump($result);
}
显示结果:
sql跟踪信息中的结果:
数据库中的信息:
说明:上面2个方法(order、group)在父类模型中是不存在的,其在使用的时候是通过魔术方法__call来实现后续的处理的。