发新话题
打印

FleaPHP自动化 CRUD 操作系列视频

本主题由 phpres 于 2007-7-16 21:01 设置高亮

FleaPHP自动化 CRUD 操作系列视频

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 正是通过这种简化日常操作的方式来提高开发效率。
一個偽裝成白癡的天纔!

TOP

自动化 CRUD 操作系列视频(第二集)

电信地址:http://www.fleaphp.org/videos/crud-2/index.html
网通地址:http://www.fleaphp.net/videos/crud-2/index.html

该视频演示了 FleaPHP 自动化 CRUD 操作如何简化读取数据库的代码。该视频是 CRUD 操作系列视频的第二部。

============================

上一集视频里,我们演示了读取数据库的一些基本操作。

这一集视频,我们来看看如何使用更复杂的查询条件,以及如何创建记录和更新记录。

为了节约时间,数据表结构我使用了 FleaPHP 示例程序中博客程序的数据结构。
而且基本的初始化代码也准备好了。


一般情况下,我们的查询条件都是使用主表的字段。

例如查询指定 ID 的博客日志。

但有时候,我们也要用关联表的字段作为查询条件。

例如查询有 CRUD 标签的博客日志。

我们先看看数据库中有哪些数据。


可以看到,第一条日志有三个标签,而第二条少了一个 PHP 标签,最后一条日志只有 CRUD 标签。

现在我们就来查询有 FleaPHP 标签的数据。
正确结果应该是查询出第一条和第二条日志。


我们还是用 findAll() 方法,只不过第一个参数使用更复杂的形式。

这里,条件参数改为使用嵌套数组,从而明确指示要以关联表的字段作为查询条件。

注意在定义使用哪一个关联表的字段进行查询时,并不是直接指定关联表的数据表名称。而是指定这个关联的映射名。

现在结果出来,只有设置了 fleaphp 标签的日志才出现在结果中。

再来试试看查询设置了 php 标签的日志。



在创建记录时,可以同时创建关联的记录。这在处理大量用户输入时非常方便。

提供关联数据时,不需要指定主键字段值和外键字段值,FleaPHP 会自动填充这些数据。

create() 方法会返回刚刚创建的记录的主键字段。

执行后可以看到四个数据表都增加了相应的记录。而我们只不过调用了一次 create() 方法。


现在再来试试创建新日志时使用已有的标签。
这里为了简化,我们随意添加了一个已有的标签。
从运行结果可以看到该标签成功的指定到了日志上。
而且不管执行多少次页面,标签不会重复指定。

update() 方法可以将改动过的数据库保存回数据库。

除了添加关联数据,还可以随时删除关联数据。
要删除关联数据比较直观的做法是先读取数据及关联的数据。然后将不需要的关联数据注销掉。

我们先创建一条包含所有标签的记录。

这里我们用了一个循环来去掉不需要的标签。

最后还是用 update() 方法将修改过的数据保存回数据库。
保存后可以看到我们刚才注销的标签已经没有再指定到日志上了。

与 create() 方法类似,update() 方法一样可以简单的更新主表的数据和关联表的数据。


由于视频长度限制,删除操作只有放到下一集视频中进行演示了。
一個偽裝成白癡的天纔!

TOP

发新话题