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,即可開啓