账户中心 退出系统
开发文档 资讯·分享 技术交流 会员登录
phpGrace GSCMS 公众号系统
模型机制

模型概述

1 模式作为MVC模式的重要组成部分,拥有业务逻辑运算、数据处理、为视图提供数据等功能。
2 phpGrace 更注重模型的复用能力,我们可以把项目常用的、具有统一规则的业务逻辑、数据查询等功能封装为一个模型类,然后在多个分组下控制器、视图内进行复用。
3 模型类的封装可以使项目更有模块感、更便于后期的维护及升级,我们建议 “一表一模型、复杂业务封装模型”。
4 自定义模型类继承自基础模型类 graceModel 基础封装了自动初始化数据操作对象、缓存处理机制,利用它们可以快速地完成自定义模型的封装工作;

创建模型

模型文件命名 : 模型名称( 建议与数据表[ 不包含统一前缀 ]同名 ).php
模型文件位置 : /appModel/对应模型文件.php
命名空间声明 : grace\model
模型继承关系 : class 自定义模型名称 extends \grace\model{}

模型文件创建命令

php grace cm 模型名称 数据表主键[ 可选,默认 id ]

模型基类内置函数

模型基类 grace\model 以具体数据表为基础,基类已经实现了数据的增删改查及数据验证等功能,您无需编写任何代码即可使用它们,下面具体介绍每个函数 :

1 设置添加和更新数据校验规则

模型文件创建后会生成2个数据校验规则,分别是 $ruleForAdd 和 $ruleForUpdata,对应增加数据和更新数据时的数据校验规则。
关于校验规则请阅读 : https://www.phpgrace.com/doc/index/88-3290-28.html?code=3292
请根据实际情况编写校验规则,如 :

// 数据校验规则 [ 添加数据 ]
public $ruleForAdd           = array(
    //"字段名称" => array("验证规则名称", "规则", "验证识别对应错误信息")
    'st_name' => array('string', '1,100', '请正确填写您的称呼'),
    'st_age'  => array('intBetween', '10,199', '请正确填写您的年龄')
);
// 数据校验规则 [ 更新数据 ]
public $ruleForUpdate           = array(
    //"字段名称" => array("验证规则名称", "规则", "验证识别对应错误信息")
);

// 如果更新时校验规则与添加时一致只实现添加即可,更新时将 添加校验规则赋值给更新规则;

2 统一格式的返回结果函数 result()

模型类会进行多种操作,我们建议开发者使用 result 函数来为每个功能函数实现统一格式的返回值;
统一格式 :

array('status'=>true|false, 'data'=> 返回数据, 'errorCode' => 错误编码)

函数参数 :

* @param bool $status // 结果状态 true 成功 false 失败或者错误
* @param string $data // 结果数据,可选参数 默认 空字符串
* @param string $errorCode // 错误编码,可选参数 默认 空字符串

使用方法 :

// 自定义模型内直接
return $this->result();

3 添加数据 add($data)

参数 : 与数据表字段对应键名称的数组
说明 : 数据校验规则见上面的说明  
在控制器内调用模型的演示代码 [ 依赖注入模式 ] :

<?php
namespace grace\controller;
use grace\grace;
use grace\model\students;
class index extends grace{
    public function index(students $studentsModel){
        // 此处 data 可以来自表单提交数据
        $data    = array(
            'st_class_id' => 2,
            'st_name' => 'garce',
            'st_age' => mt_rand(10,99),
            'st_add_time' => time()
        );
        $res = $studentsModel->add($data);
        print_r($res);
    }
}

4 删除数据 add($id)

参数 : 数据主键值  
在控制器内调用模型的演示代码 [ 实例化对象模式 ] :

<?php
namespace grace\controller;
use grace\grace;
use grace\model\students;
class index extends grace{
    public function index(){
        $studentsModel = new students();
        $res = $studentsModel->delete(4);
        print_r($res);
    }
}

5 更新数据 update($id, $data)

参数 :
1 被更新数据主键值 
2 与数据表字段对应键名称的数组
在控制器内调用模型的演示代码 [ 实例化对象模式 ] :

<?php
namespace grace\controller;
use grace\grace;
use grace\model\students;
class index extends grace{
    public function index(){
        $studentsModel = new students();
        // 更新数据校验规则与添加一致
        $studentsModel->ruleForUpdate = $studentsModel->ruleForAdd;
        // 此处 data 可以来自表单提交数据
        $data    = array(
            'st_class_id' => 2,
            'st_name' => 'test',
            'st_age' => mt_rand(10,99),
            'st_add_time' => time()
        );
        $res = $studentsModel->update(5, $data);
        print_r($res);
    }
}

6 通过主键查询单条数据 find($id)

参数 : 被查询数据主键值
在控制器内调用模型的演示代码 [ 实例化对象模式 ] :

<?php
namespace grace\controller;
use grace\grace;
use grace\model\students;
class index extends grace{
    public function index(){
        $studentsModel = new students();
        $res = $studentsModel->find(4);
        print_r($res);
    }
}

7 通过数据表操作对象 : $模型对象->table 实现更多数据查询功能

<?php
namespace grace\controller;
use grace\grace;
use grace\model\students;
class index extends grace{
    public function index(){
        $studentsModel = new students();
        // 此处
        // $table 等同于 database::table('students');
        $table = $studentsModel->table;
        $tablePK = $studentsModel->tablePK;

        // 演示查询

        // 利用 $_GET['page'] 传递页码
        $_GET['page']        = empty($_GET['page']) ? 1 : $_GET['page'];
        // 利用 $_GET['total'] 保存总数,
        // 第一次查询或者 url 没有保存总数则查询数据总数
        if(empty($_GET['total'])){
            $_GET['total'] = $table->count();
        }
        $data = $table
            ->order('st_id desc')
            ->page($_GET['page'], $_GET['total'], 2, 6, 'a')
            ->fetchAll();
        print_r($data);
    }
}