ThinkPHP3.2基础教程(6)--模型-字段定义

字段定义

  通常每个模型类是操作某个数据表,在大多数情况下,系统会自动获取当前数据表的字段信息。

  系统会在模型首次实例化的时候自动获取数据表的字段信息(而且只需要一次,以后会永久缓存字段信息,除非设置不缓存或者删除),如果是调试模式则不会生成字段缓存文件,则表示每次都会重新获取数据表字段信息。

  字段缓存保存在Runtime/Data/_fields/ 目录下面,缓存机制是每个模型对应一个字段缓存文件(注意:并非每个数据表对应一个字段缓存文件),命名格式是:

  数据库名.模型名(小写).php

demo.user.php    // User模型生成的字段缓存文件
demo.article.php // Article模型生成的字段缓存文件

  3.2.3版本开始,字段缓存的文件名调整为:数据库名.数据表前缀+模型名(小写).php

demo.think_user.php    // User模型生成的字段缓存文件
demo.top_article.php // Article模型生成的字段缓存文件

  字段缓存包括数据表的字段信息、主键字段和是否自动增长,如果开启字段类型验证的话还包括字段类型信息等等,无论是用M方法还是D方法,或者用原生的实例化模型类一般情况下只要是不开启调试模式都会生成字段缓存(字段缓存可以单独设置关闭)。

  可以通过设置DB_FIELDS_CACHE 参数来关闭字段自动缓存,如果在开发的时候经常变动数据库的结构,而不希望进行数据表的字段缓存,可以在项目配置文件中增加如下配置:

// 关闭字段缓存
‘DB_FIELDS_CACHE‘=>false

  注意:调试模式下面由于考虑到数据结构可能会经常变动,所以默认是关闭字段缓存的。

  如果需要显式获取当前数据表的字段信息,可以使用模型类的getDbFields方法来获取当前数据对象的全部字段信息,例如:

$User   = M(‘User‘);
$fields = $User->getDbFields();

  如果你在部署模式下面修改了数据表的字段信息,可能需要清空Data/_fields目录下面的缓存文件,让系统重新获取更新的数据表字段信息,否则会发生新增的字段无法写入数据库的问题。

  如果不希望依赖字段缓存或者想提高性能,也可以在模型类里面手动定义数据表字段的名称,可以避免IO加载的效率开销,例如:

namespace Home\Model;
use Think\Model;
class UserModel extends Model {
    protected $fields = array(‘id‘, ‘username‘, ‘email‘, ‘age‘);
    protected $pk     = ‘id‘;
}

  pk属性定义当前数据表的主键名,默认值就是id,因此如果是id的话可以无需定义。

  3.2.3版本以上,支持定义复合主键,例如:

namespace Home\Model;
use Think\Model;
class ScoreModel extends Model {
    protected $fields = array(‘user_id‘, ‘lession_id‘,‘score‘);
    protected $pk     = array(‘user_id‘,‘lession_id‘);
}

  除了可以设置数据表的字段之外,我们还可以定义字段的类型,用于某些验证环节。例如:

namespace Home\Model;
use Think\Model;
class UserModel extends Model {
    protected $fields = array(‘id‘, ‘username‘, ‘email‘, ‘age‘,
        ‘_type‘=>array(‘id‘=>‘bigint‘,‘username‘=>‘varchar‘,‘email‘=>‘varchar‘,‘age‘=>‘int‘)
    );
}

  

  

时间: 2024-12-06 06:36:19

ThinkPHP3.2基础教程(6)--模型-字段定义的相关文章

ThinkPHP3.2基础教程(19)--模型-CURD操作-数据创建

ThinkPHP提供了灵活和方便的数据操作方法,对数据库操作的四个基本操作(CURD):创建.更新.读取和删除的实现是最基本的,也是必须掌握的,在这基础之上才能熟悉更多实用的数据操作方法. CURD操作通常是可以和连贯操作配合完成的. 数据创建 在进行数据操作之前,我们往往需要手动创建需要的数据,例如对于提交的表单数据: // 获取表单的POST数据 $data['name'] = $_POST['name']; $data['email'] = $_POST['email']; // 更多的表

ThinkPHP3.2基础教程(21)--模型-CURD操作-数据读取

在ThinkPHP中读取数据的方式很多,通常分为读取数据.读取数据集和读取字段值. 数据查询方法支持的连贯操作方法有: 连贯操作 作用 支持的参数类型 where 用于查询或者更新条件的定义 字符串.数组和对象 table 用于定义要操作的数据表名称 字符串和数组 alias 用于给当前数据表定义别名 字符串 field 用于定义要查询的字段(支持字段排除) 字符串和数组 order 用于对结果排序 字符串和数组 group 用于对查询的group支持 字符串 having 用于对查询的havi

ThinkPHP3.2基础教程(20)--模型-CURD操作-数据写入

ThinkPHP的数据写入操作使用add方法,使用示例如下: $User = M("User"); // 实例化User对象 $data['name'] = 'ThinkPHP'; $data['email'] = '[email protected]'; $User->add($data); 如果是Mysql数据库的话,还可以支持在数据插入时允许更新操作: add($data='',$options=array(),$replace=false) 其中add方法增加$repla

ThinkPHP3.2基础教程(37)--控制器-Action参数绑定

参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数,可以简化方法的定义甚至路由的解析. 参数绑定功能默认是开启的,其原理是把URL中的参数(不包括模块.控制器和操作名)和操作方法中的参数进行绑定. 要启用参数绑定功能,首先确保你开启了URL_PARAMS_BIND设置: 'URL_PARAMS_BIND' => true, // URL变量绑定到操作方法作为参数 参数绑定有两种方式:按照变量名绑定和按照变量顺序绑定. 按变量名绑定 默认的参数绑定方式是按照变量名进行绑定,例如,我们给Bl

ThinkPHP3.2基础教程(36)--控制器-前置和后置操作

前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效. 其他的分层控制器层和内部调用控制器的情况下前置和后置操作是无效的. 系统会检测当前操作是否具有前置和后置操作,如果存在就会按照顺序执行,前置和后置操作的定义方式如下: <?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller{ //前置操作方法 public functio

ThinkPHP3.2基础教程(34)--URL操作

URL大小写 系统默认的规范是根据URL里面的模块名.控制器名来定位到具体的控制器类的,从而执行控制器类的操作方法. 如果是Windows环境,无论大小写如何都能定位到,如果在Linux环境下面,一旦大小写不一致,就会发生URL里面使用小写模块名不能找到模块类的情况.但是系统本身提供了一个不区分URL大小写的解决方案,可以通过配置简单实现. 只要在项目配置中,增加: 'URL_CASE_INSENSITIVE' =>true 配置好后,即使是在Linux环境下面,也可以实现URL访问不再区分大小

ThinkPHP3.2基础教程(33)--路由功能

利用路由功能,可以让你的URL地址更加简洁和优雅.ThinkPHP支持对模块的URL地址进行路由操作.路由功能是针对PATHINFO模式或者兼容URL而设计的,暂时不支持普通URL模式. 路由解析的最终结果通常是把URL地址解析到当前模块的某个控制器下的操作方法(不能跨模块路由),在特殊的情况下,也可以跳转到外部地址或者执行闭包函数. 注意:3.2版本的路由定义是针对模块定义的,所以路由是在模块配置文件中定义的,并且模块本身不能被路由(模块名的路由使用模块映射或者采用域名部署即可). 路由定义

css3基础教程:CSS3弹性盒模型

今天给大家分享一篇关于CSS3基础教程 文章,主要是讲CSS3弹性盒模型.弹性布局的主要思想是让容器有能力来改变项目的宽度和高度,以填满可用空间(主要是为了容纳所有类型的显示设备和屏幕尺寸)的能力. 注意:Flexbox布局是最合适的一个应用程序的组件,以及小规模的布局,而网格布局是用于较大规模的布局. 盒模型的兼容性不佳,在使用时,需要加上浏览器的私有前缀. 父元素display:box或者display:inline-box; display: -webkit-box;display: -m

php基础教程

提供给新手学习的 PHP 新手教程,是一个比较有价值的 PHP 新手教程! 出处:风流的 CG 网络日志 时间:Mon, 28 Aug 2006 07:24:34 +0000 作者:yufeng 地址:http:///read.php?38 一.PHP 简介 PHP 是一种易于学习和使用的服务器端脚本语言.只需要很少的编程知识你就能使用 PHP 建立一个真正交互的 WEB站点.本教程并不想让你完全了解这种语言,只是能使你尽快加 入开发动态 web 站点的行列.我假定你有一些 HTML(或者 HT