CI框架(CodeIgniter)公共模型类定义与用法示例

2025-05-29 0 58

本文实例讲述了CI框架(CodeIgniter)公共模型类定义与用法。分享给大家供大家参考,具体如下:

我们都知道,操作数据库的方法都写在模型中。但是一般情况下,一张表往往至少对应4个操作,也就是所谓crud。那么如果20张表,所对应的模型方法,就达到了80个,重复的操作显然这已经是一个体力活儿。

那么就对单表操作时,我们进行一下简单的封装。如下是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 {

//数据库

public $errors = array();

const dataBase = 'qndnew';

public function __construct()

{

// Call the CI_Model constructor

parent::__construct();

}

/**

* 查询分页数据(使用于简单的单表操作)

* @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 当前页数(查询全部数据时,设置为空)

* @param string $limit 查询条数(查询全部数据时,设置为空)

* @param array $order 排序条件:

* array($key => $val)

* $key为排序依据的字段,

* $val为排序的方式【asc (升序,默认)或 desc(降序), 或 random(随机)】

* @$isReturnCount boole 是否返回总条数

* @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);

}

//统计总数

if($isReturnCount){

$rs['count'] = $this->db->count_all_results('',false);//不重置查询构造器

array_push($this -> errors,$this->db->last_query());

}

//分页数据处理

if(isset($page) && isset($param['limit'])){

//分页边界值 设置

$offset = $param['page'] <= 1 ? 0 : ($param['page']-1) * $param['limit'];

$this->db->limit($param['limit'], $offset);

}

//排序规则的组合

if (!empty($order) && is_array($order))

{

foreach ($order as $key => $val)

{

$this->db->order_by($key, $val);

}

}else{

//默认按照此表的主键倒序

$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;

}

/**

* 解析参数

*/

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 数据变量

* @return INT ID

*/

public function add($table = '', $param = array())

{

if(empty($table) || !is_array($param) || empty ($param)){

return FALSE;

}

//写入数据表

$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 更新的数据

* @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 数据库名称

* @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>';

}

}

}

}

具体的业务逻辑模型如下:

?

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();

}

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

原文链接:http://www.cnblogs.com/kangjianrong/p/5865442.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 CI框架(CodeIgniter)公共模型类定义与用法示例 https://www.kuaiidc.com/94011.html

相关文章

发表评论
暂无评论