1. 模型定义
文件名称必须是 表名+model.class.php 例如:usermodel.class.php
namespace home\model; //该模型类的命名空间use think\model; //下面的模型类需要继承model基类,model是系统定义的模型类,在 think\model 这个命名空间中class usermodel extends model{ }
文件中的类名是跟文件名中的“表名”是一致的(这一项是必须的如果不一致在控制器中就会找不到这个模型类)。
类名与表名的对应关系是(注意:模型名中对应每个大写对应的数据表的前面都有一个下划线,如下第二行)
模型名 约定对应数据表(如果数据库的前缀是think_)
usermodel think_user
usertypemodel think_user_type
2. 模型实例化
2.1 直接实例化
2.1.1 不带参数实例化 $user=new \home\model\usermodel();
2.1.2 带参数实例化 $user=new \home\model\usermodel(['模型名'],['数据表前缀'],['数据库连接信息']);
上述两种方法的区别在于,第一种在实例化的时候回去读取默认配置(例如在模型中的配置或者是模块中的数据库配置),而第二种方法是直接读取传入参数的数据库配置
模型名是对应的数据库中的去掉前缀的表名,如果不指定这会读取模型类的名称但是是去掉model后的名称 例如:
useremodel.class.php 文件中的 useremodel 类 ,如果在实例化的时候传入模型名user会按传入查找数据表 前缀+“user”,如果不传则会提取 useremodel类的 “usere” 去查找数据表。这样可以解决模型名与数据表明不一致的问题。
2.2 d方法实例化
d方法的参数是模型的名称,并且和模型类的大写定义是一致的。
php //实例化模型 $user=d(user);//相当于 $user=new \home\model\usermodel();
跨模块实例化
d('admin/user') 其中 “admin” 是模块名称,“user”是模型名称
实例化 extend扩展名空间下的info模型
d('extend://editor/info')
2.3 m方法实例化
m('user') 与d方法实例化的区别是这个方法不需要该模型存在,并且如果模型存在则其中的方法也会别忽略,该方法主要是用来对数据库的操作。
当d方法没有找到模型时会默认的调用 m方法。
2.4 实例化空模型
$model=new model() 或者 $model=m();
这种空实例可以用老进行原生的sql查询(注:其他的模型也可以进行原生的sql查询,并且查询的表不必跟模型对应)
3. 模型中的字段
$fields=array('','') 表示数据表中的字段
$pk 表示数据表的主键
$connection=array('db_type' => 'mysql','db_user' => 'root','db_pwd' => '1234','db_host' => 'localhost','db_port' => '3306','db_name' => 'thinkphp','db_charset' => 'utf8','db_params' => array(), // 非必须); 表示数据库连接
数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集
$connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8';