本文實(shí)例講述了CI框架(CodeIgniter)公共模型類定義與用法。分享給大家供大家參考,具體如下:
我們都知道,操作數(shù)據(jù)庫的方法都寫在模型中。但是一般情況下,一張表往往至少對(duì)應(yīng)4個(gè)操作,也就是所謂crud。那么如果20張表,所對(duì)應(yīng)的模型方法,就達(dá)到了80個(gè),重復(fù)的操作顯然這已經(jīng)是一個(gè)體力活兒。
那么就對(duì)單表操作時(shí),我們進(jìn)行一下簡單的封裝。如下是ci框架的示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
<?php /** * Created by PhpStorm. * User: kangjianrong * Date: 16-8-26 * Time: 上午10:29 */ class My_model extends CI_Model { //數(shù)據(jù)庫 public $errors = array (); const dataBase = 'qndnew' ; public function __construct() { // Call the CI_Model constructor parent::__construct(); } /** * 查詢分頁數(shù)據(jù)(使用于簡單的單表操作) * @param string $model 模型 例如:User_model * @param string $table 表名 * @param string $select_fields 要顯示字段 * @param array $param 查詢條件: * compare(比較): * array($key => $val) $key為要操作的字段,$val為要操作的值 * array('name !=' => $name, 'id <' => $id, 'date >' => $date); * like(模糊查詢) * array('title' => $match, 'page1' => $match, 'page2' => $match) * customStr(自定義字符串): * "name='Joe' AND status='boss' OR status='active'" * in: * array('userName' => array('Frank', 'Todd', 'James')) * @param string $page 當(dāng)前頁數(shù)(查詢?nèi)繑?shù)據(jù)時(shí),設(shè)置為空) * @param string $limit 查詢條數(shù)(查詢?nèi)繑?shù)據(jù)時(shí),設(shè)置為空) * @param array $order 排序條件: * array($key => $val) * $key為排序依據(jù)的字段, * $val為排序的方式【asc (升序,默認(rèn))或 desc(降序), 或 random(隨機(jī))】 * @$isReturnCount boole 是否返回總條數(shù) * @return array|boolean * */ public function pageData( $model , $table , $param = array (), $select_fields = '' , $page = '1' , $limit = '15' , $order = array (), $isReturnCount = true){ if ( empty ( $model ) || empty ( $table )){ return false; } $this -> load -> model( $model ); $table = $this ->db->dbprefix. $table ; //處理查詢字段 if (! empty ( $select_fields )){ $this ->db->select( $select_fields )->from( $table ); } elseif (isset( $this -> $model -> selectFields)){ $this ->db->select( $this -> $model -> selectFields)->from( $table ); } else { $this ->db->select( '*' )->from( $table ); } //處理查詢條件 if ( is_array ( $param ) && count ( $param ) > 0){ $this -> parseParam( $param ); } //統(tǒng)計(jì)總數(shù) if ( $isReturnCount ){ $rs [ 'count' ] = $this ->db->count_all_results( '' ,false); //不重置查詢構(gòu)造器 array_push ( $this -> errors, $this ->db->last_query()); } //分頁數(shù)據(jù)處理 if (isset( $page ) && isset( $param [ 'limit' ])){ //分頁邊界值 設(shè)置 $offset = $param [ 'page' ] <= 1 ? 0 : ( $param [ 'page' ]-1) * $param [ 'limit' ]; $this ->db->limit( $param [ 'limit' ], $offset ); } //排序規(guī)則的組合 if (! empty ( $order ) && is_array ( $order )) { foreach ( $order as $key => $val ) { $this ->db->order_by( $key , $val ); } } else { //默認(rèn)按照此表的主鍵倒序 $primary = $this ->getPrimary(); if (! empty ( $primary )) { $this ->db->order_by( $primary , 'DESC' ); } } $query = $this ->db->get(); array_push ( $this -> errors, $this ->db->last_query()); $rs [ 'list' ] = $query ->result_array(); return $rs ; } /** * 解析參數(shù) */ private function parseParam( $param ){ if (isset( $param [ 'compare' ])){ foreach ( $param [ 'compare' ] as $key => $val ){ if (! empty ( $val )) $this ->db->where( $key , $val ); } } if (isset( $param [ 'like' ])){ foreach ( $param [ 'like' ] as $key => $val ){ if (! empty ( $val )) $this ->db->like( $key , $val ); } } if (isset( $param [ 'in' ])){ foreach ( $param [ 'in' ] as $key => $val ){ if (! empty ( $val )) $this ->db->where_in( $key , $val ); } } if (isset( $param [ 'customStr' ])){ if (! empty ( $val )) $this ->db->where( $param [ 'customStr' ]); } } /** * 新增信息 * @param string $table 表名稱 * @param array $param 數(shù)據(jù)變量 * @return INT ID */ public function add( $table = '' , $param = array ()) { if ( empty ( $table ) || ! is_array ( $param ) || empty ( $param )){ return FALSE; } //寫入數(shù)據(jù)表 $this ->db->insert( $table , $param ); array_push ( $this -> errors, $this ->db->last_query()); //返回記錄ID return $this ->db->insert_id(); } /** * 更新分類信息 * @param string $table 表名稱 * @param string $primary 表主鍵 * @param int $id 分類ID * @param array $param 更新的數(shù)據(jù) * @return type */ public function update( $table = '' , $primary = '' , $id = 0, $param = array ()) { if ( empty ( $table ) || empty ( $primary ) || empty ( $param ) || empty ( $id )) { return FALSE; } $id = (int) $id ; $this ->db->where( $primary , $id ) ->limit(1) ->update( $table , $param ); array_push ( $this -> errors, $this ->db->last_query()); return $this ->db->affected_rows(); } /** * 刪除指定ID記錄 * @param string $table 表名稱 * @param string $primary 表主鍵 * @param array $id 分類ID * @return int */ public function delete ( $table = '' , $primary = '' , $id = array ()){ if ( empty ( $table ) || empty ( $primary ) || empty ( $id )){ return FALSE; } $this ->db->where_in( $primary , $id ) -> delete ( $table ); array_push ( $this -> errors, $this ->db->last_query()); return $this ->db->affected_rows(); } /** * 獲取表的主鍵 * @param string $database 數(shù)據(jù)庫名稱 * @param strting $table 表名稱 */ public function getPrimary( $table = '' , $database = self::dataBase) { if ( empty ( $database ) || empty ( $table )) { return FALSE; } $sql = "SELECT k.column_name FROM information_schema.table_constraints t JOIN information_schema.key_column_usage k USING (constraint_name,table_schema,table_name) WHERE t.constraint_type= 'PRIMARY KEY' AND t.table_schema= 'qndnew' AND t.table_name= 'qnd_user' "; $query = $this ->db->query( $sql )->result_array(); return isset( $query [0][ 'column_name' ]) ? $query [0][ 'column_name' ] : false; } /** * debug sql語句 */ public function debugSql(){ if ( count ( $this ->errors) > 0){ foreach ( $this ->errors as $val ){ echo $val . '<br>' ; } } } } |
具體的業(yè)務(wù)邏輯模型如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class User_model extends My_model { const USER = 'qnd_user' ; public $selectFields = array ( 'id' , 'guid' , 'phone' , 'userName' , 'password' , 'headPortraits' , 'nickName' , 'createTime' , ); const SMS_ROLE = 'qnd_role' ; public function __construct() { } } |
控制器中測試如下:
1
2
3
4
5
6
7
8
9
10
11
|
public function modelTest(){ $this -> load -> model( 'User_model' ); // 載入 model $whereArr = array ( 'compare' => array ( 'userName' => 'Frank' , ), ); $rs = $this -> User_model -> pageData( 'User_model' , 'user' , $whereArr ); print_r( $rs ); $this -> User_model -> debugSql(); } |
希望本文所述對(duì)大家基于CodeIgniter框架的PHP程序設(shè)計(jì)有所幫助。
原文鏈接:http://www.cnblogs.com/kangjianrong/p/5865442.html