1 模型
1.1 模型创建规则
- 存储地址:/应用/模块/Model目录中
- 命名规则:模型名称+Model+.class.php
1.2 实例化模型对象
1.2.1 常用实例化
- dump()是TP一个内置函数。与PHP的var_dump()差不多
public function test1(){
$model=new \Admin\Model\GoodsModel();.
dump($model);
}
1.2.2 TP内置M函数实例化对象
- M函数默认3个参数。第一个指某个数据表,第二个指表前缀,第三个指mysql连接信息
public function test2(){
$model=M('goods');
dump($model);
}
1.2.3 D函数实例化
- D函数可以跨模块使用
- 当实例化某个不存在的自定义模型,会使用TP的模型基类进行实例化
public function test3(){
$model=D('goods');
dump($model);
}
1.2.4 M与D的区别
- M用于实例化TP的模型基类
- D会优先实例化自定义的模型。若自定义模型类不存在,就实例化TP模型基类
1.3 模型的CURD(增删改查)操作
- 增(add、addAll)
- 删(delete)
- 改(save)
- 查(find、select)
1.3.1 数据写入(add、addAll)
- add方法(写入单条数据)
public function test4(){
$model=D('goods');
$data=array(
'goods_name'=>'test4',
'goods_time'=>time(),
'goods_body'=>'test4body'
);
$res=$model->add($data);
dump($res);
}
- addAll方法(写入多条数据)
public function test5(){
$model=D('goods');
$data=array(
array('goods_name'=>'test4', 'goods_time'=>time(), 'goods_body'=>'test4body'),
array('goods_name'=>'test5', 'goods_time'=>time(), 'goods_body'=>'test5body'),
array('goods_name'=>'test6', 'goods_time'=>time(), 'goods_body'=>'test6body'),
);
$res=$model->addAll($data);
dump($res);
}
1.3.2 数据修改
- save指定修改条件
- save会识别主键标识,如下的代码goods_id为主键
public function test6(){
$model=D('goods');
$data=array(
'goods_id'=>3,
'goods_name'=>'testSave'
);
$res=$model->save($data);
dump($res);
}
- dump若返回int(1),标识受影响一行
- 若返回0,表示没有数据进行更新操作
- where指定修改条件
public function test7(){
$model=D('goods');
$data=array(
'goods_name'=>'testSave'
);
$res=$model->where("goods_name='test5'")->save($data);
dump($res);
}
- where方法可以使用数组格式指定条件
- == 也可以使用原生SQL语句中的where子句==
- setField更新个别字段
public function test8(){
$model=D('goods');
$model->where('goods_id=6')->setField(
array(
'goods_name'=>'testSetField',
'goods_body'=>'testSetFieldBody'
)
);
$model->where('goods_id=7')->setField('goods_name','testSetField');
}
- setInc与setDec
setInc:指定某个字段的值进行增加操作
setDec:指定某个字段的值进行减少操作
public function test9(){
$model=D('goods');
$model->where('goods_id=9')->setInc('addtime');
$model->where('goods_id=10')->setDec('addtime',100);
}
1.3.3 数据查询
- find:获取一条数据,返回数据格式是一维数组
- select:获取多条数据,返回数据格式是二维数组
public function test10(){
$model=D('goods');
$data=$model->where('goods_id=1')->find();
dump($data);
$data=$model->where("goods_name='testSave'")->select();
dump($data);
}
1.3.4 数据删除
public function test11(){
$model=D('goods');
$res=$model->where('goods_id=2')->delete();
echo $model->getLastSql();
dump($res);
}
1.5 数据表字段定义
- 在自定义的模型中将具体的字段信息保存到某个属性中(固定的属性名称)。本质就是将具体的字段信息保存到变量中。变量会载入到内存。由于内存的速度比磁盘更快。所以字段定义比字段缓存效果更高
1.5.1 修改Goods模型
在GoodsModel.class.php中写入:
class GoodsModel extends Model{
protected $pk='goods_id';
protected $fields=array('goods_name','goods_name','goods_img','addtime','goods_body');
}
1.6 数据创建
- create方法默认只能处理post方式
-
在GoodsModel.class.php中写入:
public function add(){
if(IS_GET){
$this->display;
}else{
$model=D('Goods');
$data=$model->create();
dump($data);
}
}
1.7 字段映射
在GoodsModel.class.php中写入:
protected $_map=array(
'name'=>'goods_name',
'pic'=>'goods_img',
'body'=>'goods_body'
);
1.8 自动验证
1.8.1 验证规则
- 静态方式:在模型类通过$_validate属性定义规则
- 动态方式:使用模型类的validate方法动态创建自动验证规则
array(
array(验证字段1,验证规则,错误提示,[ 验证条件,附加规则,验证时间 ]),
array(验证字段2,验证规则,错误提示,[ 验证条件,附加规则,验证时间 ]),
....
)
验证条件 | 说明 |
---|
self::EXISTS_VALIDATE或0 | 存在字段就验证(默认) |
self::MUST_VALIDATE或1 | 必须验证 |
self::VALUE_VALIDATE或2 | 值不为空时验证 |
常用附加规则 | 说明 |
---|
regex | 正则验证,定义的验证规则是一个正则表达式 |
function | 函数验证,定义的验证规则是一个函数名 |
callback | 方法验证,定义的验证规则是当前模型类的一个方法 |
验证时间 | 说明 |
---|
self::MODEL_INSERT或1 | 新增数据时验证 |
self::MODEL_UPDATE或2 | 编辑数据时验证 |
self::MODEL_BOTH或3 | 全部情况下验证(默认) |
1.8.2 举例
在GoodsModel.class.php中写入:
protected $_validate=array(
array('goods_name','checkName','goods_name error',1,'callback'),
array('goods_price','checkPrice','goods_price error',1,'function'),
array('goods_body','require','goods_body error',1,'regex'),
);
public function checkName($goods_name){
if(mb_strlen($goods_name,'utf8')>3){
return false;
}
return true;
}
在Application\Common\Common\function.php中写入:
function checkPrice($goods_price){
if($goods_price<=0){
return false;
}
return true;
}
1.9 自动完成
- 使用create创建数据TP会自动对接收的内容进行增加或修改的操作
- 静态方法:在模型类通过$_auto属性定义处理规则
- 动态方法:使用 模型类的auto方法创建自动处理规则
array(
array(完成字段1,完成规则,[ 完成条件,附加规则 ]),
array(完成字段2,完成规则,[ 完成条件,附加规则 ]),
....
在GoodsModel.class.php中写入:
public function add(){
if(IS_GET){
$this->display();
}else{
$model=D('Goods');
$auto=array(
array('addtime','time',1,'function')
);
$data=$model->auto($auto)->create();
if(!$data){
dump($model->getError());
}
dump($data);
}
}
1.10 统计查询方法
1.10.1 查看统计查询中的方法
方法 | 说明(参数是要统计的字段名) |
---|
Count | 统计数量 |
Max | 获取最大值 |
Min | 获取最小值 |
Avg | 获取平均值 |
Sum | 获取总分 |
public function test12(){
$model=D('Goods');
echo $model->count();
echo '<hr/>';
echo $model->max('goods_id');
echo '<hr/>';
echo $model->sum('goods_id');
echo '<hr/>';
echo $model->where("goods_name='testSave' ")->sum('goods_id');
echo '<hr/>';
}
开启开发者工具
在Common\Conf\config.php中添加配置信息
SHOW_PAGE_TRACE’=>true,即可开启