表模型
在MicroPHP里面有个MpTableModel类,MpTableModel继承了类MpModel。该类封装了常用的表操作。每个类的对象都和一个具体的表绑定。
实例化一个表模型可以通过函数table($table_name,$db=null);返回的是MpTableModel类对象,MpTableModel类继承了MpModel类。
  参数说明:
  $table_name  表名称,不含配置的前缀
  $db          使用的数据库连接,留空默认使用当前的$this->db。可以是$this->database()方法返回的数据库连接对象。 
  提示:
  1.使用table()之前要确定一下$system['table_cache_folder']文件夹是否存在,该文件夹用来缓存表字段信息。
  2.如果后期修改了表结构增加或者删除了字段,记得删除1中文件夹里面的对应表缓存文件,名字是:表名称.php。 实用的方法如下:
  $table_model=table('user');
  (1).find($values, $is_rows = false, $order_by = null)方法,查询数据
    find方法非常灵活,下面给出几个使用示例:
    1.获取主键是10的记录
    $table_model->find(10)
    2.获取主键是10,11的两个记录
    $table_model->find(array(10,11),true)
    3.根据条件获取一条记录
    $table_model->find(array('id'=>100))
    4.根据条件获取多条记录
    $table_model->find(array('id >'=>10),true)
    5.获取主键是10,11的两个记录,并用id排序
    $table_model->find(array(10,11),true,'id desc')
    6.根据条件获取多条记录,并用id排序
    $table_model->find(array('id >'=>10),true,'id asc')
  (2).findAll($where = null, $orderby = NULL, $limit = null, $fileds = null),获取所有数据。
      下面是几个例子:
    1.查询表所有数据。
      $table_model->findAll()
    2.查询表中type为1的所有数据。
      $table_model->findAll(array('type'=>1))
    3.查询表中type为1的所有数据,并且按着id倒序排列。
      $table_model->findAll(array('type'=>1),'id desc')
    4.查询表中type为1的按着id倒序排列的100条数据。
      $table_model->findAll(array('type'=>1),'id desc',100)
    5.查询表中type为1的按着id倒序排列的100条数据,同时只获取id和name两个字段。
      $table_model->findAll(array('type'=>1),'id desc',100,'id,name')
  (3).findCol($col, $where, $is_rows = false, $order_by = null)方法,查询字段数据
   findCol和find类似,值是获取的是某个字段的值或者数组,示例可以参考find方法。
  (4).delete($values, Array $cond = NULL)方法,删除数据
   delete方法是用来删除数据。
    下面是几个例子:
    1.删除主键是10的记录
    $table_model->delete(10)
    2.删除主键是10,11,12的记录
    $table_model->delete(array(10,11,12))
    3.删除主键是10,11,12记录中gid是3的记录
    $table_model->delete(array(10,11,12),array('gid'=>3))
  (5).deleteIn($key, $values, Array $cond = NULL)方法,删除数据
    下面是几个例子:
    1.删除cat_id是3的记录
    $table_model->deleteIn(‘cat_id’,3)
    2.删除cat_id是3,4,5的记录
    $table_model->deleteIn(‘cat_id’,array(3,4,5))
    3.删除cat_id是3,4,5记录中id大于100的记录
    $table_model->deleteIn(‘cat_id’,array(3,4,5),array('id >'=>100))
  (6).check($source_data, &$ret_data, $rule = null, $map = null)方法,验证数据
   参数说明:
   $source_data 数据源,要检查的数据
   $ret_data    数据验证通过$ret_data是验证规则处理后的数据,用于插入或者更新到数据库,数据验证失败$ret_data是空数组
   $rule        验证规则,格式:array(
                                '字段名称'=>array(
                                                 '表单验证规则'=>'验证失败提示信息',
                                                 ...   
                                                 ),
                                 ...
                               )
   $map         字段映射信息数组。格式:array('表单name名称'=>'表字段名称',...)
   返回null:验证通过。返回字符串:验证失败提示信息。 
   使用示例:
        $user = table('admin');
        $_POST['user'] = 'test';
        //$_POST['user'] = 'testaa';
        $_POST['pass'] = 'testtesttesttest';
        $rule = array(
            'username' => array($this->rule->range_len(5, 16) => '用户名5-16字符'),
            'password' => array($this->rule->len(16) => '密码16字符'),
        );
        $map=array('user'=>'username','pass'=>'password');
        $data = array();
        if (is_null($msg = $table_model->check($_POST, $data, $rule,$map))) {
            //dump($data);
            dump($table_model->update($data,3));
        } else {
            echo $msg;
        }
    (7).insert($ret_data),插入数据。
        $ret_data应该是check()验证通过的数据。
    (8).update($ret_data, $where),需要更新的数据。
        $ret_data  应该是check()验证通过的数据。
        $where     可以是where条件关联数组,还可以是主键值。
    (9).columns(),获取表字段数组。
    (10).getPage($page, $pagesize, $url, $fields = '*', Array $where = null, Array $like = null, $orderby = null, $page_bar_order = array(1, 2, 3, 4, 5, 6), $page_bar_a_count = 10)
        getPage用于获取分页数据,同时含有分页条。返回的是一个数组,items字段是结果集,page字段是分页条字符串。
        参数说明:
        $page       第几页
        $pagesize   每页多少条
        $url        基础url,里面的{page}会被替换为实际的页码
        $fields     select的字段,全部用*,多个字段用逗号分隔
        $where      where条件,关联数组
        $like       搜素的字段,比如array('title'=>'java');搜索title包含java
        $orderby    排序字段,比如: 'id desc'
        $page_bar_order   分页条组成,可以参考手册分页条部分
        $page_bar_a_count 分页条a的数量,可以参考手册分页条部分
        下面是使用示例:
         1.第一页,每页20条。
           $table_model->getPage(1, 20, '?demo/&p={page}', '*', null, null, null, array(3, 5));
    (11).search($page, $pagesize, $url, $fields, $cond, $page_bar_order = array(1, 2, 3, 4, 5, 6), $page_bar_a_count = 10)
        getPage用于获取分页数据,同时含有分页条。返回的是一个数组,items字段是结果集,page字段是分页条字符串。
        参数说明:
        $page       第几页
        $pagesize   每页多少条
        $url        基础url,里面的{page}会被替换为实际的页码
        $fields     select的字段,全部用*,多个字段用逗号分隔
        $cond       SQL语句where后面的部分,不要带limit
        $page_bar_order   分页条组成,可以参考手册分页条部分
        $page_bar_a_count 分页条a的数量,可以参考手册分页条部分
        下面是使用示例:
         1.搜索id大于11而且type为3,按着id倒序排列。每页20条。
           $query='id>11 and type=3 order by id desc';
           $url='?demo.page&query=' . urlencode($query) . '&p={page}';
           $table_model->search($this->input->get('p'), 20, $url , '*', $query));