作用简述:
1.模型的数据字段和表字段是对应关系,默认会自动获取,包括字段的类型;
2. 自动获取会导致增加一次查询,如果在模型中配置字段信息,会减少内存开销;
3. 可以在模型设置$schema 字段,明确定义字段信息,字段需要对应表写完整;
//设置字段信息,需要写完整的数据表字段
protected $schema = [
'id' => 'int',
'username' => 'string',
'status' => 'int',
'create_time' => 'datetime',
'...' => '...'
];
这样写会很麻烦,于是就用到我们的字段缓存。
字段缓存仅在部署模式下生效,并且仅适用于使用think-orm的情况,如果你使用了其它的ORM库,则不支持生成。
可以通过生成数据表字段信息缓存,提升数据库查询的性能,避免多余的查询。命令如下:
在项目根目录下执行:
php think optimize:schema
此时我们可以看到,缓存目录多出文件夹schema
打开后里面便是自动的缓存字段
<?php
return array (
'id' => 'int',
'username' => 'string',
'password' => 'string',
'gender' => 'string',
'email' => 'string',
'price' => 'float',
'details' => 'string',
'uid' => 'int',
'status' => 'int',
'list' => 'string',
'delete_time' => 'datetime',
'create_time' => 'datetime',
'update_time' => 'datetime',
'_pk' => 'id',
'_autoinc' => 'id',
);
注意
默认情况下字段缓存文件是关闭状态,需要在 config/database.php 开启;
// 开启字段缓存
'fields_cache' => true,
多应用模式下
如果是多应用模式,你可以使用下面的指令生成admin应用的字段缓存。
php think optimize:schema admin
会自动生成当前数据库配置文件中定义的数据表字段缓存,也可以指定数据库生成字段缓存(必须有用户权限),例如,下面指定生成demo数据库下面的所有数据表的字段缓存信息。
php think optimize:schema --db demo
执行后会自动在runtime/schema目录下面按照数据表生成字段缓存文件。
没有继承think\Model类的(抽象)模型类不会生成。如果定义了公共模型类,最好把公共模型类定义为抽象类(abstract)。
更新数据表字段缓存也是同样的方式,每次执行都会重新生成缓存。如果需要单独更新某个数据表的缓存,可以使用:
php think optimize:schema --table think_user
支持指定数据库名称
php think optimize:schema --table demo.think_user