l 1,模型的种类
l 2,模型的字段操作
l 3,数据主键
l 4,模型的连贯操作
l 5,查询语言
一、模型的种类
1、基础模型
(1)通过M()函数获得,还可以通过实例化Model()的形式获得基础模型,同样构造函数的参数为某个表名
$baseModel=M('Xiao');或$model=new Model('Xiao');
(2)那么直接实例化模型和调用M()函数的区别:
直接实例化模型,每次会得到一个新的模型
通过M()函数获得的模型,多次调用只会得到某个表的一个对象,建议使用,节省资源
2、空模型
(1)这个模型不与任何数据表相关,作用是执行一些不与数据表相关的操作,例如统计当前数据库有几张表?
(2)我们可以使用模型的query()或者 execute()方法执行sql语句,其中:
query()返回查询的结果
execute()返回受影响的行数
例:
//空模型
public function nums(){
$model=M();//不写表名
$sql='show tables';
$list=$model->query($sql);//query()返回查询的结果
var_dump($list);
}
3、自定义模型
(1)模型的定义,命名方式:
去掉表前缀的数据表名称,采用驼峰法,首字母大写,后面加上Model.class.php
表名Model.class.php(上面用的都是系统自定义好的)
(2)关于数据表名称的属性的定义:
tableName
trueTableName
例如在数据库有一个goods表,而我们定义的模型类是GoodModel,按照约定这个模型名称应该是Good,对应的表应该是good,这时我们就需要修改模型的属性来改变默认的规则
例:ModelAction.class.php
public function good(){
$model=D('User');// D()方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,
var_dump($model);
}
UserModel.class.php
<?php
class UserModel extends Model{
protected $tableName='xiao';//如果自定义模型没有与表名一致,这里设置表名
}
?>
4、模型字段操作
(1)TP框架每次获得模型的时候,会去数据库中确定数据表的结构
(2)如果开启的是部署模式,会将这个表的结构缓存起来,因为一旦项目上线,很少再去修改表的结构,这样提高访问速度
数据表的结构保存到
(3)在实际开发中,为了最快速的获得当前模型表的结构,将表的结构定义到这个模型中,字段名是$fields
5、数据主键
ThinkPHP的默认约定每个数据表的主键名采用统一的id作为标识,并且是自动增长类型的。
系统会自动识别当前操作的数据表的字段信息和主键名称,所以即使你的主键不是id,也无需进行额外的设置,系统会自动识别
6、连贯操作
连贯操作是什么呢?
我们可以通过select()查询出所有的数据,但是有时候我们不需要所有的数据,我们可能通过一些条件拼接一个sql语句,然后去查询
例如,现在我需要查询出价格为3500 的商品名称
7、模型的连贯操作
where(‘条件字符串’)定义查询或更新的条件
field(‘字段列表’) 需要查询的字段,如果为true显示数据表的所有字段
order()对操作结果排序
limit()定义查询结果的限制
group()分组查询
having()当前查询结果的条件
table()定义要操作的数据表名称,
union()联合查询,连接的是两个select语句
distinct()去除重复查询
join()连接查询:默认为左连接。
(1)where(‘条件字符串’)定义查询或更新的条件
(2)field(‘字段列表’) 需要查询的字段,如果为true显示数据表的所有字段
field()的参数可以是一个数组,如果是一个关联数组的话,为字段取别名
(3)order()对操作结果排序
(4)limit()定义查询结果的限制
(5)group()分组查询
(6)having()当前查询结果的条件
(7)table()定义要操作的数据表名称,
还可以在table()方法中跨库操作
(7)union()联合查询,连接的是两个select语句
(8)distinct()去除重复查询
8、查询语言
ThinkPHP支持直接使用字符串作为查询条件,但是推荐使用关联数组或对象作为查询条件,这样会更加安全
(1) 使用字符串作为查询条件
(2) 使用数组作为查询条件
更改查询条件:
$cond[‘查询条件’] = array(‘关系’,’值’) 表示出来值与字段之间的关系
$cond['id']=array('eq','2');
$list=$good->where($cond)->select();
var_dump($list);//id=2的记录
模糊匹配:
$cond['name']=array('like','w%');//模糊匹配:
$list=$good->where($cond)->select();
var_dump($list);//name带w的记录
(3) 使用对象作为查询条件
(4)统计查询
合计函数在TP框架中的使用
count() 统计数量(统计字段名)
avg() 统计平均值
sum() 统计和
例:$sum=$good->sum('id');//id和
var_dump($sum);