模型的种类
基础模型
通过M()获得的模型,还可以通过 new Model() 来获得基础模型
通过M()函数获得的模型,多次实例化模型的时候,获得的是同一个模型,
new Model() 方法获得的模型,多次实例化获得的是不同的模型对象
所以,我们建议使用 M()函数获得模型,好处是减少开销
空模型
(1)这个模型不与任何数据表相关,作用是执行一些不与数据表相关的操作,例 如统计当前数据库有几张表?
作用是,和操作的具体的数据表没有关系,通常用于查询数据库有多少数据表,或 者查询有多少数据库
空模型获得方式:L
M()函数获得,只是没有参数
或者使用 new Model() 获得,没有参数
要查询mysql_test数据库,有多少数据表
空模型通常执行 query() 或者 execute() 函数
query()和excute()方法区别:
query()获得的是查询的结果
execute()获得的是受影响的行数
自定义模型
(1)模型的定义,命名方式:
去掉表前缀的数据表名称,采用驼峰法,首字母大写,后面加上Model.class.php
(2)关于数据表名称的属性的定义:
tableName
trueTableName
例如在数据库有一个goods表,而我们定义的模型类是GoodModel,按照约定这 个模型名称应该是Good,对应的表应该是good,这时我们就需要修改模型的属性来改变默认的规则
通过在自定义模型类里面增加一个属性,$tableName = ‘真实的表名’
如何使用自定义的模型?
(1)自定义模型的时候,要让自定义的模型继承自 Model类
classGoodModel extends Model
(2)通过D()函数实例化自定义的模型
D()函数的用法:如果有参数,实例化的是自定义的模型类,如果没有参数,实例化的是基类模型
(1)
(2)系统默认模型名 对应一张数据表 例如 GoodsModel 对应 Gooda 表,
但是例外,模型名和数据表名称并不完全一样,例如 GoodsModel 但是数据库只有Good
如果出现这种特殊情况,我们通过在模型类里面定义 $tableNmae属性,告诉系统真实的表名是谁
(3)如何使用自定义模型
D()函数的用法:如果有参数,实例化的是自定义的模型类,如果没有参数,实例化的是基类模型
模型字段操作
(1)TP框架每次获得模型的时候,会去数据库中确定数据表的结构
(2)如果开启的是部署模式,会将这个表的结构缓存起来,因为一旦项目上线,很少再去修改表的结构,这样提高访问速度
(3)在实际开发中,为了最快速的获得当前模型表的结构,将表的结构定义到这个模型中,字段名是$fields
数据主键
ThinkPHP的默认约定每个数据表的主键名采用统一的id作为标识,并且是自动增长类型的。
系统会自动识别当前操作的数据表的字段信息和主键名称,所以即使你的主键不是id,也无需进行额外的设置,系统会自动识别
连贯操作
连贯操作是什么呢?
我们可以通过select()查询出所有的数据,但是有时候我们不需要所有的数据,我们可能通过一些条件拼接一个sql语句,然后去查询
例如,现在我需要查询出价格为3500 的商品名称
模型的连贯操作
where(‘条件字符串’)定义查询或更新的条件
$good_name=$good_model->where('shop_price=3500')->select();
field(‘字段列表’) 需要查询的字段,如果为true显示数据表的所有字段
$good_name=$good_model->field(true)->where('shop_price=3500')->select();
order()对操作结果排序
$list= $good_model->order('shop_pricedesc')->select();
limit()定义查询结果的限制
$list= $good_model->limit(3)->order('shop_pricedesc')->select();
group()分组查询
$list =$good_model->group('shop_price')->select();
having()当前查询结果的条件
$list=$good_model->having('goods_id=11')->select();
table()定义要操作的数据表名称,
$list=$good_model->table('stu')->field('name')->select();
union()联合查询,连接的是两个select语句
$list=$good_model->field('goods_name')->union('selectname from stu')->select();
distinct()去除重复查询
$list=$good_model->distinct(true)->field('shop_price')->select();
join()连接查询:默认为左连接。
查询语言:
ThinkPHP支持直接使用字符串作为查询条件,但是推荐使用关联数组或对象作为查询条件,这样会更加安全
(1) 使用字符串作为查询条件
$list=$good_model->where('shop_price=3500')->select();
(2) 使用数组作为查询条件
$cond[‘查询条件’] = array(‘关系’,’值’) 表示出来值与字段之间的关系
$cond['shop_price'] = array('eq','3500');
$list=$good_model->where($cond)->select();
模糊匹配:$cond['goods_name']=array('like','ip%');
$list=$good_model->where($cond)->select();
Between区间查询:$cond['goods_id']=array('in','1,3,5,7,9');
$cond['shop_price']=array('between',array(3000-5000));
统计查询
$sum=$good_model->sum('shop_price');
$avg=$good_model->avg('shop_price');
$count=$good_model->count('shop_price');
var_dump($count);