模型定义

定义一个模型类很简单,例如下面是一个User模型:

<?php if (!defined('ROOT_PATH')) exit('No Permission');
/**
 * 用户基本信息模型
 *
 * @category   Framework
 * @package    Model
 * @author     Xinze <i@xinze.me>
 * @copyright  Copyright (c) 2016-10-14, Xinze
 * @version    1.0
 * @todo
 */
class User_BaseModel extends Zero_Model
{
    public $_cacheName       = 'user';
    public $_tableName       = 'user_base';
    public $_tablePrimaryKey = 'user_id';
    public $_useCache        = false;
    public $_useListCache    = true;

    public $fieldType = array(
        'rights_group_id' => 'DOT',
        'store_ids' => 'DOT',
        'chain_ids' => 'DOT'
    );

    /**
     *  默认key = $this->_tableName . '_cond'
     * @access public
     */
    public $_multiCond = array(
        'user_base_cond' => array(
            'user_account' => null,
            'user_nickname' => null,
            'user_token' => null,
            'user_state' => null,
            'user_is_admin' => null,
            'store_id' => null,
            'user_id' => null,
            'user_quickcode' => null,
        )
    );

    public $_validateRules = array(
        'integer' => array(
            'user_id',
            'user_state'
        )
    );

    public $_validateLabels = array();


    /**
     * @param string $user User Object
     * @return void
     * @var   string $db_id 指定需要连接的数据库Id
     */
    public function __construct(&$db_id = 'account', &$user = null)
    {
        $this->_useCache = CHE;

        $this->_tabelPrefix = TABLE_ACCOUNT_PREFIX;
        parent::__construct($db_id, $user);
    }

}

请确保你已经在数据库配置文件中配置了数据库连接信息,如不清楚请参考数据库一章, 模型构造函数中$db_id需要和数据库连接配置信息匹配

模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,例如:

模型名 约定对应数据表(假设数据库的前缀定义是 shop_)
User_BaseModel shop_user_base
User_LoginHistoryModel shop_user_login_history

常用的模型设置属性包括(以下属性都不是必须设置):

属性 描述
_cacheName 缓存配置名称
_tableName 模型对应的表明
_tablePrimaryKey 表的主键
_useCache 是否启用缓存
_useListCache 是否启用列表查询缓存
fieldType 表字段数据格式定义 DOT-逗号风格;JSON-JSON字符串;HTML-存储HTML内容;SOURCE-不过滤HTML字符串而直接存入
_multiCond 表字段是否可以作为where条件去查询数据

模型中可用方法:

<?php
    /**
     * 插入  - 可以传入二维数据一次添加多条记录 插入多条记录 实现批量插入数据
     * @param array $field_row 信息
     * @param bool $return_insert_id 是否返回自增主键
     * @param bool $replace 是否数据覆盖
     * @return bool  是否成功
     * @access public
     */
    public function add($field_row, $return_insert_id=false, $replace=false)
    {

    }

    /**
     * 保存内容,insert|update 可以传入二维数据一次添加或者编辑多条记录, 如果有主键则编辑,否则添加
     * @param array $field_row   key=>value数组
     * @param bool $return_insert_id 自增主键
     * @param bool $flag 是否增量更新
     * @return bool $update_flag 是否成功
     * @access public
     */
    public function save($field_rows, $return_insert_id=false, $flag=false)
    {
    }

    /**
     * 传入主键删除操作
     * @param  mix  $table_primary_key_value
     * @return bool $del_flag 是否成功
     * @access public
     */
    public function remove($table_primary_key_value)
    {
    }

    /**
     * 根据条件删除操作, 如果存在主键,使用remove
     * @param  mix  $table_primary_key_value
     * @return bool $del_flag 是否成功
     * @access public
     */
    public function removeCond($column_row=array())
    {
    }


    /**
     * 根据主键更新表内容
     * @param mix   $table_primary_key_value  主键
     * @param array $field_row   key=>value数组
     * @param bool $flag 是否增量更新
     * @param array $field_old_row key=>value数组
     * @return bool $update_flag 是否成功
     * @access public
     */
    public function edit($table_primary_key_value=null, $field_row, $flag=null, $field_old_row=null)
    {
    }

    /**
     * 是否增量更新  edit 别名
     * @param mix   $table_primary_key_value
     * @param array $field_value_new
     * @param array $field_value_old
     * @return bool $update_flag 是否成功
     * @access public
     */
    public function editInc($table_primary_key_value=null, $field_row, $field_old_row=null)
    {
    }

    /**
     * 根据条件更新表内容
     *
     * @param array   $column_row  条件
     * @param array $field_row   key=>value数组
     * @param bool $flag 是否增量更新
     * @param array $field_old_row key=>value数组
     * @return bool $update_flag 是否成功
     * @access public
     */
    public function editCond($column_row=array(), $field_row, $inc_flag=null, $field_old_row=null)
    {
    }



    /**
     * 只获取一条记录
     *
     * @param  int   $table_primary_key_value  主键值
     * @return array $rows 返回的查询内容
     * @access public
     */
    public function getOne($table_primary_key_value=null, $key_row=null, $sort_row=array())
    {
        $row = array();

        $rows = $this->get($table_primary_key_value, $key_row, $sort_row);

        if ($rows)
        {
            $row = reset($rows);
        }

        return $row;
    }

    /**
     * 根据主键值,从数据库读取数据, 必须获取主键后再读取数据
     *
     * @param  int   $table_primary_key_value  主键值
     * @return array $rows 返回的查询内容
     * @access public
     */
    public function get($table_primary_key_value=null, $key_row=null, $sort_row=array())
    {
    }

    /**
     * 取得影响的行数
     *
     * @return int $num 行数
     * @access public
     */
    public function getFoundRows()
    {
        $num = $this->_selectFoundRows();

        return $num;
    }

    /**
     * 获取数据记录行数, cache 清除太多,不合理. 组名称,是否根据用户id来处理.特列下允许使用, 正常通过数据库来存储冗余统计数据
     *
     * @param  array $cond_row
     * @param  string   $group
     * @param  bool   $cache_flag  是否启用cache
     * @return int
     * @access public
     */
    public function getNum($cond_row, $group=null, $cache_flag=false)
    {
    }



    /**
     * 读取分页列表, find根据条件获取数据, 而get根据id获取数据
     *
     * @param  int $column_row where查询条件, 需要设置在multiCond中, 方便处理为group名字,用来通过组更新缓存
     * @param  string $group 组名称
     * @param  int $page 当前页码
     * @param  int $rows 每页显示记录数
     * @param  int $sort_row 排序方式
     * @return array $rows 返回的查询内容
     * @access public
     */
    public function find($column_row=array(), $sort_row=array(), $page=1, $page_num=500, $group=null, $cache_flag=false)
    {
    }

    public function findOne($column_row=array(), $sort_row=array(), $page=1, $page_num=1, $group=null, $cache_flag=false)
    {
    }

    /**
     * 根据where条件取得主键
     *
     * @param  array   $cond_row
     * @param  array   $sort_row
     * @param  int   $page
     * @param  string   $group
     * @param  bool   $cache_flag
     * @return array $rows 信息
     * @access public
     */
    public function findKey($cond_row=array(), $sort_row=array(), $page=1, $page_num=500, $group=null, &$total=0, $cache_flag=false)
    {
    }

    /**
     * 读取分页列表Id
     *
     * @param  int $column_row where查询条件, 需要设置在multiCond中
     * @param  int $sort_row array('key'=>'ASC|DESC')排序方式
     * @param  int $page 当前页码
     * @param  int $rows 每页显示记录数
     * @param  string $group 组名称
     * @param  bool $cache_flag 是否缓存
     * @param  bool $array_flag 是否使用array_value处理返回的items
     * @return array $rows 返回的查询内容
     * @access public
     */
    public function listKey($column_row=array(), $sort_row=array(), $page=1, $page_num=500, $group=null, $cache_flag=false, $array_flag=true)
    {
        $data = array();
        $data['page'] = $page;
        $data['total'] = $total;  //total page
        $data['records'] = $records;
        $data['items'] = $array_flag ? array_values($data['items']) : $data['items'];
        return $data;
    }

    /**
     * 读取分页列表
     *
     * @param  int $column_row where查询条件, 需要设置在multiCond中, 方便处理为group名字
     * @param  int $sort_row 排序方式
     * @param  int $page 当前页码
     * @param  int $rows 每页显示记录数
     * @param  string $group 组名称
     * @param  bool $cache_flag 是否缓存
     * @param  bool $array_flag 是否使用array_value处理返回的items
     * @return array $rows 返回的查询内容
     * @access public
     */
    public function lists($column_row=array(), $sort_row=array(), $page=1, $page_num=500, $group=null, $cache_flag=false, $array_flag=true)
    {

        $data = array();
        $data['page'] = $page;
        $data['total'] = ceil_r($total / $page_num);  //total page
        $data['records'] = $total;
        $data['items'] = $array_flag ? array_values($data['items']) : $data['items'];
        return $data;
    }


?>
文档更新时间: 2020-05-28 17:43   作者:随商信息技术(上海)有限公司