前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TP入门第十一天

TP入门第十一天

作者头像
苦咖啡
发布2018-05-07 17:43:35
6800
发布2018-05-07 17:43:35
举报
文章被收录于专栏:我的博客

1、数据库视图

视图通常是指数据库的视图,视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。

要定义视图模型,只需要继承ViewModel,然后设置viewFields属性即可

例子:

class BlogViewModel extends ViewModel {

public $viewFields = array(

‘Blog’=>array(‘id’,’name’,’title’),

‘Category’=>array(‘title’=>’category_name’,’_on’=>’Blog.category_id=Category.id’),

‘User’=>array(‘name’=>’username’,’_on’=>’Blog.user_id=User.id’),

);

}

我们来解释一下定义的格式代表了什么。

$viewFields 属性表示视图模型包含的字段,每个元素定义了某个数据表或者模型的字段。

例如:

‘Blog’=>array(‘id’,’name’,’title’)

表示BlogView视图模型要包含Blog模型中的id、name和title字段属性,这个其实很容易理解,就和数据库的视图要包含某个数据表的字段一样。而Blog相当于是给Blog模型对应的数据表定义了一个别名。

默认情况下会根据定义的名称自动获取表名,如果希望指定数据表,可以使用:

‘_table’=>”test_db.test_table”

如果希望给当前数据表定义另外的别名,可以使用

‘_as’=>’myBlog’

BlogView视图模式除了包含Blog模型之外,还包含了Category和User模型,下面的定义:

‘Category’=>array(‘title’=>’category_name’)

和上面类似,表示BlogView视图模型还要包含Category模型的title字段,因为视图模型里面已经存在了一个title字段,所以我们通过

‘title’=>’category_name’

把Category模型的title字段映射为category_name字段,如果有多个字段,可以使用同样的方式添加。可以通过_on来给视图模型定义关联查询条件,例如:

‘_on’=>’Blog.category_id=Category.id’

理解之后,User模型的定义方式同样也就很容易理解了。

Blog.categoryId=Category.id AND Blog.userId=User.id

最后,我们把视图模型的定义翻译成SQL语句就更加容易理解视图模型的原理了。假设我们不带任何其他条件查询全部的字段,那么查询的SQL语句就是

Select

Blog.id as id,

Blog.name as name,

Blog.title as title,

Category.title as category_name,

User.name as username

from think_blog Blog JOIN think_category Category JOIN think_user User

where Blog.category_id=Category.id AND Blog.user_id=User.id

当然我们也可以不用视图进行数据查询但是显然非常繁琐。而定义了视图模型之后,所有的字段会进行自动处理,添加表别名和字段别名,从而简化了原来视图的复杂查询。

(具体是用需要到应用中说明)

2、缓存

ThinkPHP在数据缓存方面包括文件方式、共享内存方式和数据库方式在内的多种方式进行缓存,通过插件方式还可以增加以后需要的缓存类,让应用开发可以选择更加适合自己的缓存方式,从而有效地提高应用执行效率。目前已经支持的缓存方式包括:File、Apachenote、Apc、Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis和Xcache。

使用方法:

所有的缓存方式都被统一使用公共的调用接口,这个接口就是Cache缓存类。

缓存类的使用很简单,首先实例化缓存类:

$Cache = Cache::getInstance(‘缓存方式’,’缓存参数’);

缓存方式

可以支持File、Apachenote、Apc、Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis和Xcache

缓存参数(根据不同的缓存方式存在不同的参数)

通用缓存参数

expire缓存有效期(默认由DATA_CACHE_TIME参数配置)length缓存队列长度(默认为0) queue缓存队列方式(默认为file还支持xcache和apc)

缓存方式

额外支持的缓存参数

File(文件缓存)

temp缓存目录(默认由DATA_CACHE_PATH参数配置)

Apachenote缓存

host缓存服务器地址( 默认为127.0.0.1)

Apc缓存

暂无其他参数

Eaccelerator缓存

暂无其他参数

Xcache缓存

暂无其他参数

Memcache

host缓存服务器地址( 默认为127.0.0.1)port端口(默认为MEMCACHE_PORT参数或者11211) timieout缓存超时(默认由DATA_CACHE_TIME参数设置) persistent长连接(默认为false)

Shmop

size(默认由SHARE_MEM_SIZE参数设置)tmp(默认为TEMP_PATH) project(默认为s) length缓存队列长度(默认为0)

Sqlite

db数据库名称(默认:memory:)table表名(默认为sharedmemory) persistent长连接(默认为false)

Db

db数据库名称(默认由DB_NAME参数配置)table数据表名称(默认由DATA_CACHE_TABLE参数配置)

Redis

host服务器地址(默认由REDIS_HOST参数配置或者127.0.0.1)port端口(默认由REDIS_PORT参数配置或者6379) timeout超时时间(默认由DATA_CACHE_TIME配置或者false) persistent长连接(默认为false)

例如,使用Xcache作为缓存方式,缓存有效期60秒。

$Cache = Cache::getInstance(‘Xcache’,array(‘expire’=>’60’));

设置缓存参数

实例化缓存类的时候如果没有指定缓存参数,可以通过setOptions方法具体指定:

$Cache->setOptions(‘temp’,’ThinkPHP’);

具体缓存参数根据不同的缓存方式有所区别。

如果需要获取当前缓存驱动的参数,可以使用:

$value = $Cache->getOptions(‘temp’);

存取缓存数据

$Cache->set(‘name’,’ThinkPHP’);  // 缓存name数据

$value = $Cache->get(‘name’); // 获取缓存的name数据

$Cache->rm(‘name’);  // 删除缓存的name数据

或者使用下面的方法是等效的:

$Cache->name =’ThinkPHP’;

$value = $Cache->name;

Unset($Cache->name);

缓存设置方法可以重新指定缓存有效期,例如:

$Cache->set(‘name’,’ThinkPHP’,3600);  // 缓存name数据3600秒

TP3.0中添加了缓存队列的功能

使用缓存队列很简单,只需要给当前缓存实例设置length参数即可,默认length参数为0,表示不启用缓存队列功能。下面的缓存队列的设置:

$Cache = Cache::getInstance(‘Xcache’,array(‘expire’=>’60’,’length’=>10));

或者

$Cache = Cache::getInstance(‘Xcache’,array(‘expire’=>’60’));

$Cache->setOptions(‘length’,10); //设置缓存队列长度为10

$Cache->setOptions(‘queue’,’xcache’); //设置缓存队列方式为xcache

具体快捷缓存、快速缓存等其他知识参考手册进行学习

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012年8月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档