>백엔드 개발 >PHP 튜토리얼 >CI 프레임워크의 공개 모델 클래스 정의 및 사용

CI 프레임워크의 공개 모델 클래스 정의 및 사용

不言
不言원래의
2018-06-14 11:51:072027검색

이 글에서는 주로 CI 프레임워크(CodeIgniter) 공개 모델 클래스의 정의와 사용법을 소개하고, 구체적인 예시를 바탕으로 CI 프레임워크 공개 모델 클래스의 정의와 이를 기반으로 데이터베이스를 운영하는 관련 구현 기술을 분석합니다. . 도움이 필요한 친구들은 다음을 참고하세요

이 글의 예제는 CI 프레임워크(CodeIgniter)의 공개 모델 클래스의 정의와 사용법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

데이터베이스를 운영하는 방법이 모델에 기록되어 있다는 것은 우리 모두 알고 있습니다. 그러나 일반적인 상황에서 테이블은 소위 크루드(crud)라고 하는 최소 4개의 작업에 해당하는 경우가 많습니다. 따라서 테이블이 20개 있으면 해당 모델 방법은 80개에 도달합니다. 반복 작업은 분명히 물리적 작업입니다.

그런 다음 단일 테이블을 운영할 때 간단한 캡슐화를 수행합니다. 다음은 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 = &#39;qndnew&#39;;
  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(&#39;name !=&#39; => $name, &#39;id <&#39; => $id, &#39;date >&#39; => $date);
   *   like(模糊查询)
   *     array(&#39;title&#39; => $match, &#39;page1&#39; => $match, &#39;page2&#39; => $match)
   *   customStr(自定义字符串):
   *     "name=&#39;Joe&#39; AND status=&#39;boss&#39; OR status=&#39;active&#39;"
   *   in:
   *     array(&#39;userName&#39; => array(&#39;Frank&#39;, &#39;Todd&#39;, &#39;James&#39;))
   * @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 = &#39;&#39;, $page = &#39;1&#39;, $limit = &#39;15&#39;, $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(&#39;*&#39;)->from($table);
    }
    //处理查询条件
    if (is_array($param) && count($param) > 0){
      $this -> parseParam($param);
    }
    //统计总数
    if($isReturnCount){
      $rs[&#39;count&#39;]  = $this->db->count_all_results(&#39;&#39;,false);//不重置查询构造器
      array_push($this -> errors,$this->db->last_query());
    }
    //分页数据处理
    if(isset($page) && isset($param[&#39;limit&#39;])){
      //分页边界值 设置
      $offset = $param[&#39;page&#39;] <= 1 ? 0 : ($param[&#39;page&#39;]-1) * $param[&#39;limit&#39;];
      $this->db->limit($param[&#39;limit&#39;], $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, &#39;DESC&#39;);
      }
    }
    $query = $this->db->get();
    array_push($this -> errors,$this->db->last_query());
    $rs[&#39;list&#39;] = $query->result_array();
    return $rs;
  }
  /**
   * 解析参数
   */
  private function parseParam($param){
    if(isset($param[&#39;compare&#39;])){
      foreach ($param[&#39;compare&#39;] as $key => $val){
        if (!empty($val)) $this->db->where($key, $val);
      }
    }
    if(isset($param[&#39;like&#39;])){
      foreach ($param[&#39;like&#39;] as $key => $val){
        if (!empty($val)) $this->db->like($key, $val);
      }
    }
    if(isset($param[&#39;in&#39;])){
      foreach ($param[&#39;in&#39;] as $key => $val){
        if (!empty($val)) $this->db->where_in($key, $val);
      }
    }
    if(isset($param[&#39;customStr&#39;])){
      if (!empty($val)) $this->db->where($param[&#39;customStr&#39;]);
    }
  }
  /**
   * 新增信息
   * @param string $table 表名称
   * @param array $param 数据变量
   * @return INT ID
   */
  public function add($table = &#39;&#39;, $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 = &#39;&#39;, $primary = &#39;&#39;, $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 = &#39;&#39;, $primary = &#39;&#39;, $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 = &#39;&#39;, $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=&#39;PRIMARY KEY&#39;
         AND t.table_schema=&#39;qndnew&#39;
         AND t.table_name=&#39;qnd_user&#39;";
    $query = $this->db->query($sql)->result_array();
    return isset($query[0][&#39;column_name&#39;]) ? $query[0][&#39;column_name&#39;] : false;
  }
  /**
   * debug sql语句
   */
  public function debugSql(){
    if(count($this->errors) > 0){
      foreach($this->errors as $val){
        echo $val.&#39;<br>&#39;;
      }
    }
  }
}

구체적인 비즈니스 로직 모델은 다음과 같습니다.

class User_model extends My_model {
  const USER = &#39;qnd_user&#39;;
  public $selectFields = array(
    &#39;id&#39;,
    &#39;guid&#39;,
    &#39;phone&#39;,
    &#39;userName&#39;,
    &#39;password&#39;,
    &#39;headPortraits&#39;,
    &#39;nickName&#39;,
    &#39;createTime&#39;,
  );
  const SMS_ROLE = &#39;qnd_role&#39;;
  public function __construct()
  {
  }
}

컨트롤러에서의 테스트는 다음과 같습니다.

public function modelTest(){
    $this -> load -> model(&#39;User_model&#39;); // 載入 model
    $whereArr = array(
            &#39;compare&#39;=>array(
              &#39;userName&#39; => &#39;Frank&#39;,
            ),
          );
    $rs = $this -> User_model -> pageData(&#39;User_model&#39;,&#39;user&#39;,$whereArr);
    print_r($rs);
    $this -> User_model -> debugSql();
  }

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용을 보시려면 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

CI 프레임워크에서 zip 클래스 사용

위 내용은 CI 프레임워크의 공개 모델 클래스 정의 및 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.