模型的介绍


    Model: 模型基础类,该类完成了基本的 CURD、ActiveRecord 模式、连贯操作和统计查询等
    CURD:Create,Update,Read,Delete
    AdvModel: 高级模型类,完成一些如 文本字段、只读字段、序列化字段、乐观锁、多数据库连接 等模型的高级特性
    ViewModel: 视图模型类,完成了模型的视图操作
    RelationModel: 关联模型类,完成了模型的关联操作

    模型的命名规范


    正常命名
    **

    表名(不含前缀) 模型名称(类名) 文件名 例子
    user UserModel UserModel.class.php class UserModel extends Model{}
    user_group UserGroupModel UserGroupModel.class.php class UserGroupModel extends Model{}

    特殊情况—$tableName (没有后缀的表的名称)
    当表前缀和系统设置的前缀(DB_PREFIX)一致而表名和模型名称不一致时,可设置此属性$tableName
    class UserModel extends Model{
    protected $tableName = ‘users’;
    }

    特殊情况—$trueTableName (完整的表名称)
    如果表的前缀跟系统设定的不一致(表名和模型名可能一致)时,需要设定模型的 trueTableName 属性
    class UserModel extends Model{
    protected $trueTableName= ‘users’;
    }

    表后缀

    表名(不含前缀) 后缀 模型名称(类名) 文件名
    log001 001 LogModel LogModel.class.php


    基础Model类**


    插入基础数据
    public function insert(){
    header(“Content-Type:text/html; charset=utf-8”);
    $Dao = M(“User”); // 实例化模型类
    // 或者是 new Model,这里的M是快捷方法

    1. // 构建写入的数据数组(自主构建)<br /> $data["username"] = "小王"; <br /> $data["password"] = md5("123456"); <br /> $data["email"] = "12345@163.com"; <br /> $data["regdate"] = time();
    2. // 构建写入的数据数组[通过form表单]<br /> $data["username"] = $_POST["username"]; <br /> $data["password"] = md5($_POST["password"];); <br /> $data["email"] = $_POST["email"]; <br /> $data["regdate"] = time();
    3. // 写入数据 <br /> if($lastInsId = $Dao->add($data)){ <br /> echo "插入数据 id 为:$lastInsId"; <br /> } else { <br /> $this->error('数据写入错误!'); <br /> } <br /> <br /> /***********************************************/<br /> // 使用对象方式插入数据<br /> // 数据对象赋值 <br /> $Dao->username = "小王"; <br /> $Dao->password = md5("123456"); <br /> $Dao->email = "12345@163.com"; <br /> $Dao->regdate = time();
    4. // 写入数据 <br /> if($lastInsId = $Dao->add()){ <br /> echo "插入数据 id 为:$lastInsId"; <br /> } else { <br /> $this->error('数据写入错误!'); <br /> } <br /> /**********************************************/
    5. // 使用create()创建数据对象自动搜集表单数据 <br /> // 或者使用 - 接受 GET 数据:create($_GET) <br /> if($Dao->create()){<br /> $Dao->password = md5($_POST["password"]); <br /> $Dao->regdate = time(); <br /> if($lastInsId = $Dao->add()){ <br /> echo "插入数据 id 为:$lastInsId"; <br /> } else { <br /> echo "数据写入错误!"; <br /> } <br /> }else{ <br /> exit($Dao->getError().' [ [返 回]() ]'); <br /> } <br />}

    用户自定义模型,自动验证设置
    该模型放置在 Lib/Model文件夹下,并且自动加载


    class UserModel extends Model{
    // 一些业务逻辑……
    // 自动验证设置
    protected $_validate = array(
    array(‘username’,’require’,’用户名必须填写!’,1),
    array(‘email’,’email’,’邮箱格式错误!’,2),
    array(‘username’,’’,’用户名已经存在!’,0,’unique’,1),
    );
    //自动填充设置
    protected $_auto = array(
    array(‘regdate’,’time’,self::MODEL_INSERT,’function’),
    array(‘password’,’md5’,self::MODEL_INSERT,’function’),
    );
    }

    // 调用某Action下的insert方法
    public function insert(){
    header(“Content-Type:text/html; charset=utf-8”);
    //实例化自定义的一个UserModel
    $Dao = D(“User”);

    // 使用create()方法读取表单数据并进行数据自动校验和填充
    if($Dao->create()){
    if($lastInsId = $Dao->add()){
    echo “插入数据 id 为:$lastInsId”;
    } else {
    echo “数据写入错误!”;
    }
    }else{
    exit($Dao->getError().’ [ 返 回 ]’);
    }
    }

    实例化模型类


    1.实例化基础模型来操作表 user
    $User = new Model(‘User’);
    $User = M(‘User’);

    2.实例化其他模型类来扩展一些通用的逻辑
    $User = new CommonModel(‘User’);
    $User = M(‘User’, ‘CommonModel’);

    对于以上的M方法
    如果对数据表进行简单的CURL操作而无复杂的而没有复杂的业务逻辑时
    如果只有个别的表有较为复杂的业务逻辑时候可以将M方法和实例化CommonModel类进行结合使用.

    3.实例化用户定义的模型类
    $User = new UserModel();
    $User = D(‘User’);

    //D方法的跨项目调用
    $User = D(‘User’, ‘Admin’); // 实例化 Admin 项目下面的 User 模型
    $User = D(‘Admin.User’); // 启用了项目分组

    对于以上的D方法
    使用数据的自动校验功能,关联模型
    业务逻辑比较复杂,且涉及的表众多
    跨项目调用

    4.实例化空模型类,可以使用原生sql来操作数据库
    $Model = new Model();
    $Model = M();