模型定义

模型是model的意思,在mvc架构中的model层,一般指数据库操作 方便管理调用,模型类只有存在独立的业务逻辑或属性时才需要定义
User模型类

<?php
namespace app\index\model;
use thinkModel;
class User extends Model{
}

确保数据库配置中配置了数据库连接信息

模型自动对应数据表 模型类的命名规则是除去表前缀的数据表名称 驼峰法命名 首字母大写[大驼峰]

模型名约定对应数据表(假设数据库前缀是 think_
Userthink_user
UserTypethink_user_type

规则和系统约定不合
需要设置Model类的数据表名称属性 确保能找到对应的数据表

模型自动对应的数据表名遵循小写+下划线规范 如果表名有大写的情况 必须设置模型的table属性

为避免模型的名称和PHP关键字冲突
启用类后缀功能 在应用配置文件app.php中设置

    // 开启应用类库后缀'
    class_suffix' => true,

所有的应用类库定义时都需要加上对应后缀 包括控制器类

这样app\index\modelUser类定义就要改成

<?php
namespace app\index\model;
use thinkModel;
class UserModel extends Model{
}

文件名也要改为UserModel.php

多数情况 不同模块的模型是不需要独立的
可以统一在common模块下面定义模型

模型设置

默认主键为id 如果没使用id作为主键名 需要在模型中设置

namespace app\index\model;
use thinkModel;
class User extends Model{
    protected $pk = 'uid';
}

指定数据表甚至数据库连接

namespace app\index\model;

use thinkModel;
class User extends Model{
protected $table = 'think_user'; // 设置当前模型对应的完整数据表名称
protected $connection = 'db_config';// 设置当前模型的数据库连接
}

connection建议用配置参数名(database.php添加)
而不是具体的连接信息 避免把数据库连接固化在代码里面

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

属性描述
name模型名(默认为当前不含后缀的模型类名)
table数据表名(默认自动获取)
pk主键名(默认为id)primary key
connection数据库连接(默认读取数据库配置)
query模型使用的查询类名称
field模型对应数据表的字段列表(数组)

模型初始化

模型支持初始化 与控制器的初始化不同
模型的初始化是定义Modelinit方法

use thinkModel;
class User extends Model{// 模型初始化
protected static function init(){
//TODO:初始化内容
}
}

模型初始化方法通常用于注册模型的事件操作

init必须是静态方法 且只在第一次实例化时候执行

模型操作

模型中除了可调用数据库类的方法之外
可自定义己方法  可把模型看成是数据库的增强版

模型的查询方法无需和数据库查询一样调用tablename方法
因为模型会按照规则自动匹配对应的数据表

Db::name('user')->where('id','>',10)->select();

改成模型操作

User::where('id','>',10)->select();

区别是查询结果的类型不同
第一种查询结果是(二维)数组
第二种查询结果是包含了模型(集合)的数据集
在大多数情况下 二种返回类型的使用方式无明显区别

模型操作和数据库操作的另外区别是模型支持包括获取器、修改器、自动完成在内的一系列自动化操作和事件
简化了数据的存取操作
但性能有所下降(其实并没下降 而是自动帮你处理了一些原本需要手动处理的操作)
逐步领略到模型的这些特色功能