FleaPHP自动化 CRUD 操作系列视频(第一集)
电信地址:
http://www.fleaphp.org/videos/crud-1/index.html
网通地址:
http://www.fleaphp.net/videos/crud-1/index.html
该视频演示了 FleaPHP 自动化 CRUD 操作如何简化读取数据库的代码。该视频是 CRUD 操作系列视频的第一部。
============================
这个例子演示了 FleaPHP 自动化 CRUD 操作如何读取数据库
这个数据库是我个人
博客的数据库,演示主要用到了保存博客日志和评论,以及分类的数据表。
初始化工作很简单,载入
文件就可以了。
然后设置一下缓存目录和数据库连接参数。缓存目录用于将数据库的结构信息缓存起来,提高性能。
读取数据表以前,要先建立一个表数据入口的继承类。这个类很简单,只需要指定对应的数据表名称和主键
字段名就可以了。
findAll() 方法可以查询符合条件的记录。即可以是全部,也可以是一部分,例如分页查询。
现在刷新
浏览器,可以看到数据已经查询出来了。
我们再来查询一次,这次按照博客日志的发布日期反向排序。就是最后发布的排在最前面。
为了提高性能,我们通常需要指定查询结果中只需要哪些字段。下面我们只查询ID和标题。
findAll() 可以查询符合条件的记录中的任何一部分,这里我们从第100条开始取5条。由于
PHP是从0开始计算位置,所以这里位置要输入99,而不是100。
好了,我们演示了一些简单的查询。包括指定排序方式、结果字段和指定范围。下面看看自动化 CRUD 操作如何处理数据表之间的关联。
对于每一个数据表,都要建立一个对应的表数据入口继承类,并指定数据表名称和主键字段名。接下来,就可以开始
定义数据表关联了。
关联有四种类型,分别是一对一、一对多、多对多和从属关系。这里我们演示的一对多,就是一篇博客日志有多个评论。
对于一对多关联,要指定三个属性。首先指定与哪一个表数据入口对象关联,也就是这个对象的类名字。然后指定用哪个字段来关联。最后指定关联的数据用什么名字映射到主表的记录中。
第二个属性是外键字段名,但这个外键的定义和数据库规范中的外键不是一回事。以我们现在演示的例子来说,外键字段就是在评论数据表中用什么字段保存博客日志的ID。从而确定这个评论属于哪一篇博客日志。
第三个属性的映射名字稍后我们看到查询结果后再来解释。
现在仔细观察查询结果,可以看到每一条博客日志的记录中多了一个评论字段。而这个字段的值则是一个二维数组(或者说一个表格)。其中每一个数组就是该篇日志的一条评论。
下面我们继续给博客日志表数据入口添加关联。这次关联到分类表。
在演示数据中,每一个博客日志可以有多个分类,而每一个分类也可以对应多篇博客日期。所以这是一种多对多关联。
多对多关联比起一对多关联的定义要多出两个属性。一个是关联的外键字段,也就是代码中第三个属性。
另一个是中间表的名称。因为数据库不可能直接保存多对多关系,所以必须借助一个中间表来保存。在定义多对多关联时,我们就要指定这个中间表的名称。
其他属性和一对多关联就没什么区别了。
现在刷新
页面,可以看到日志的分类数据也读取出来了。
我们在中间表为一篇日志添加两个分类的数据,看看查询结果有什么变化。
刷新后可以看到分类信息增加了。
最后,我们给关联添加一个新属性,用来指定只读取关联表的哪些字段。这样也可以提高性能。
最后,我们的读取结果很清晰了。
不但读取了每篇博客日志的ID和标题,还读取了这篇博客日志的所有评论的作者,以及这篇博客日志对应了哪些分类。
最后看看我们的代码,实现这些功能没有写一条
SQL语句,而且整个代码也才80多行,还包括注释。
在实际开发
应用程序时,只需要为每一个数据表定义一次表数据入口类就行了。所以查询部分的代码还更简单。
FleaPHP 正是通过这种简化日常操作的方式来提高开发效率。