Cet article présente principalement la définition et l'utilisation de la classe de modèle public du framework CI (CodeIgniter). Il analyse la définition de la classe de modèle public du framework CI sous la forme d'exemples spécifiques et les compétences de mise en œuvre associées pour l'exploitation de la base de données basée sur. la classe de modèle public. Les amis qui en ont besoin peuvent Pour référence,
Les exemples de cet article décrivent la définition et l'utilisation des classes de modèle public du framework CI (CodeIgniter). Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Nous savons tous que les méthodes de fonctionnement de la base de données sont écrites dans le modèle. Mais dans des circonstances normales, un tableau correspond souvent à au moins 4 opérations, ce qu'on appelle le crud. Ainsi s’il y a 20 tables, les méthodes modèles correspondantes atteindront 80. Les opérations répétées sont évidemment un travail physique.
Ensuite, lors de l'exploitation d'une seule table, nous effectuons une simple encapsulation. Voici un exemple du cadre ci :
<?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>'; } } } }
Le modèle logique métier spécifique est le suivant :
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() { } }
Le test dans le contrôleur est le suivant :
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(); }
Ce qui précède est Tout le contenu de cet article, j'espère qu'il sera utile à tout le monde. L'apprentissage est utile. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
Utilisation de la classe zip dans le framework CI
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!