Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
我们在UserModel类里面根本没有定义任何user表的字段信息,但是系统是如何做到属性对应数据表的字段呢?这是因为DyhbFrame可以在运行时自动获取数据表的字段信息(并且程序可以缓存字段),包括数据表的主键字段和是否自动增长等等,如果需要显式获取当前数据表的字段信息,可以使用模型类的get_fields方法来获取。如果你在开发过程中修改了数据表的字段信息,而且缓存了字段,可能需要清空Runtime/Cache/Db/Fields目录下面的缓存文件,让系统重新获取更新的数据表字段信息。
如果你没有定义模型类,进行相关操作的时候一样会生成字段缓存文件。
也可以在模型类里面手动定义数据表字段的名称,在模型类里面添加fields属性即可,定义格式如下:
class UserModel extends Model{
protected $fields = array(
'id',
'username',
'email',
'age',
)
protected $indexes=array();
protected $auto='id';
protected $primary='id';
}
其中primary 表示主键字段名称 auto 表示主键是否自动增长类型,indexes表示索引
可以通过设置DB_FIELDS_CACHE 参数来关闭字段自动缓存,如果希望进行数据表的字段缓存,可以在项目配置文件中增加如下配置:
'DB_FIELDS_CACHE'=>TRUE
调试模式下面由于考虑到数据结构可能会经常变动,所以默认是关闭字段缓存的。系统会自动识别当前操作的数据表的字段信息和主键名称,系统会自动识别。要在外部获取当前数据对象的主键名称,请使用下面的方法:
$primary = $Model->get_primary;
目前不支持联合主键的自动操作。
在个别情况下,可能不需要对当前操作的数据表进行字段缓存,或许是由于采用了动态方式或者当前模型根本没有任何相关的数据表,我们可以设置autoCheckFields属性来关闭某个模型类的字段获取和缓存。
$fields = $User->get_fields();
