ThinkPHP开发指南-模型之获取字段
导航:上一页
我们在UserModel类里面根本没有定义任何User表的字段信息,但是系统是如何做到属性对应数据表的字段呢?这是因为ThinkPHP可以在运行时自动获取数据表的字段信息(确切的说,是在第一次运行的时候,而且只需要一次,以后会永久缓存字段信息,除非设置不缓存或者删除),包括数据表的主键字段和是否自动增长等等,如果需要显式获取当前数据表的字段信息,可以使用模型类的getDbFields方法来获取。如果你在开发过程中修改了数据表的字段信息,可能需要清空Data/_fields目录下面的缓存文件,让系统重新获取更新的数据表字段信息。
如果你没有定义模型类,进行相关操作的时候一样会生成字段缓存文件。也可以在模型类里面手动定义数据表字段的名称,可以避免IO加载的效率开销,在模型类里面添加fields属性即可,定义格式如下:
PHP代码
class UserModel extends Model{ protected $fields = array( 'id', 'username', 'email', 'age', '_pk'=>'id', '_autoinc'=>true ) }
其中_pk 表示主键字段名称 _autoinc 表示主键是否自动增长类型.可以通过设置DB_FIELDS_CACHE 参数来关闭字段自动缓存,如果在开发的时候经常变动数据库的结构,而不希望进行数据表的字段缓存,可以在项目配置文件中增加如下配置:
PHP代码
'DB_FIELDS_CACHE'=>false
调试模式下面由于考虑到数据结构可能会经常变动,所以默认是关闭字段缓存的。ThinkPHP的默认约定每个数据表的主键名采用统一的id作为标识,并且是自动增长类型的。系统会自动识别当前操作的数据表的字段信息和主键名称,所以即使你的主键不是id,也无需进行额外的设置,系统会自动识别。要在外部获取当前数据对象的主键名称,请使用下面的方法:
PHP代码
$pk = $Model->getPk();
目前不支持联合主键的自动操作。在个别情况下,可能不需要对当前操作的数据表进行字段缓存,或许是由于采用了动态方式或者当前模型根本没有任何相关的数据表,我们可以设置autoCheckFields属性来关闭某个模型类的字段获取和缓存。
- 使用getDbFields方法可以获取当前数据对象的全部字段信息:
PHP代码
$fields = $User->getDbFields();