定义字段

定义字段

1、为什么需要定义字段

在每次实例化模型时,系统都会自动执行以下代码:

调试界面如下图所示:

由上图可知,我们每次调用模型进行实例化时,系统都会自动执行SQL语句:show columns,这条语句代表分析模型对应的数据表的表结构,在实际项目开发中,这个语句是非常耗时的,而且其对数据库的开销也非常大,那么在实际开发时最好缓存数据表的字段信息。

2、字段缓存

  • 字段缓存保存在Runtime/Data/_fields/ 目录下面
  • 只要是不开启调试模式都会生成字段缓存(字段缓存可以单独设置关闭)。
  • 可以通过设置DB_FIELDS_CACHE 参数来关闭字段自动缓存
  • 可以在模型类里面手动定义数据表字段的名称,可以避免IO加载的效率开销,在模型类里面添加fields属性即可

?

关闭APP_DEBUG后,字段会自动缓存,效果如下图所示:

程序运行效果:

我们发现,当我们开启了字段缓存后,系统会自动缓存数据表字段,以后每次实例化模型时,系统不会在分析表的表结构,而是去读缓存的文本文件。这样可以减少对数据库服务器的压力。

?

实际项目开发中,我们也可以通过配置文件中配置参数来决定是否需要开启字段缓存:

3、定义字段(重要)

通过以上字段缓存我们发现,虽然我们可以解决ThinkPHP对数据库服务器的压力,但是其在实例化模型时需要读取缓存的文本文件来分析表的表结构,这样会造成服务器的I/O开销,有没有办法可以解决这个问题呢?

答:可以使用定义字段的形式来解决这个问题。

路径:自定义模型文件中

定义语法:

protected $fields=array(数据表字段信息…);

示例代码:

以后我们在实例化自定义模型时,调试结果如下:

4、定义主键(重要)

在ThinkPHP中存在一个小bug,如果你的数据表中没有定义id主键,而是使用其他字段作为项目。其在操作时,如果使用主键作为操作条件,会产生异常结果。遇到这种情况,可以使用如下方式解决:

在自定义模型中,可以$pk属性,如下图所示:

时间: 2024-10-15 17:49:49

定义字段的相关文章

在定义字段的时候设字符集 的优先机别更高

| articles | CREATE TABLE `articles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` longtext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1 | mysql> select * from articles; +----+---------+ | id | content | +

C# 接口中能否定义字段?

答案是不能. 语法上不允许. 也不符合接口的目标. 接口可以看成是对实现的约束, 而字段是实现细节. 接口对外部暴露时, 不应该暴露实现细节. 从 C# 的语言实现来看, 接口可以看成是一组方法槽. 实现接口的类向这些槽中填充接口方法的引用, Interface.Method(). 既然接口是一组保存方法引用的集合,那么属性的 get, set 方法, 索引的 get, set 方法, 还有事件的 add, remove 方法都可以放到接口中定义. 但是字段不是一个方法, 接口中没有用于保存字段

1.4.3 定义字段

一旦定义好字段类型,字段的定义就很简单了.你所需要做的就是提供一个名称和字段类型,只要你想,你也可以提供一些选项来覆盖字段类型的选项.字段定义在schema.xml文件中: <field name="price" type="sfloat" indexed="true" stored="true"/> 字段具有和字段类型相同的选项. 属性 描述 值 indexed true:字段值可以用于查询检索 true or

lua 游戏开发_技能定义字段

-- 技能分组 eSG_Attack = 0; -- 普攻 eSG_Skill = 1; -- 技能 eSG_TriSkill = 2; -- 触发技能 -- 技能效果类型 eSE_Damage = 1; -- 伤害 eSE_Buff = 2; -- 祝福 eSE_DBuff = 3; -- 诅咒 -- 技能类型 eST_Attack = 1; -- 主动 eST_Tri = 2; -- 触发 eST_Passive = 3; -- 被动 -- 伤害类型 eSD_ATN = 1; -- 物理伤害

Magento2 updated quote_item table - 更新quote_item 表自定义字段

/** * @param $class * @return mixed */ public function mc_get_obj($class) { return \Magento\Framework\App\ObjectManager::getInstance()->get($class); } /** * TODO UPDATE * @return bool|mixed */ public function update() { $customerId = $this->customer

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

字段定义 通常每个模型类是操作某个数据表,在大多数情况下,系统会自动获取当前数据表的字段信息. 系统会在模型首次实例化的时候自动获取数据表的字段信息(而且只需要一次,以后会永久缓存字段信息,除非设置不缓存或者删除),如果是调试模式则不会生成字段缓存文件,则表示每次都会重新获取数据表字段信息. 字段缓存保存在Runtime/Data/_fields/ 目录下面,缓存机制是每个模型对应一个字段缓存文件(注意:并非每个数据表对应一个字段缓存文件),命名格式是: 数据库名.模型名(小写).php dem

1.4.2 solr字段类型--(1.4.2.1)字段类型定义和字段类型属性

1.4.2 solr字段类型 (1.4.2.1) 字段类型定义和字段类型属性. (1.4.2.2) solr附带的字段类型 (1.4.2.3) 使用货币和汇率 (1.4.2.4) 使用Dates(日期) (1.4.2.5) 使用枚举字段 (1.4.2.6) 使用外部文件和程序 (1.4.2.7) 字段属性使用案例 字段类型定义和字段类型属性 字段类型元素fieldType包含4个信息的类型:name,class-实现类的名称,analyzer-用于字段类型的分析,字段属性Field. schem

Solr字段类型field type的定义

摘要: Solr的字段类型定义了Solr如何解析字段数据并将数据检索出来,了解Solr的字段类型定义有助于更好的配置与使用Solr. 字段类型的定义 字段类型的定义主要包含如下四个方面的信息: 名称 实现的类名 如果field type 是TextField,则可以指定字段解析器 字段类型属性 在schema.xml中定义的字段类型 字段类型在schema.xml中指定,每一个字段类型被定义在fieldType标签之间,下面这个例子是一个text_general的字段类型: <fieldType

在lua中创建字段安全的对象

lua萌新,刚刚学习和使用不到一个月.有不对的地方,还望各路大神不吝赐教. lua中可以用table来模拟对象,但table是可以任意增加键值的.在对象模拟中,暂且也叫它为字段(field)吧.如果在面向对象中,你定义了一个对象,可以在对象以外的地方随意改动这个对象的字段,访问不存在的字段,你想象一下这有多恐怖?比如你定义了一个Vector3{float x = 0; float y = 0; float z = 0;}  我在外面某处加一个float t = 1; 当你在创建并引用这对象的时候