首页 理论教育PHPMVC开发实战:自定义模型与数据库实例化

PHPMVC开发实战:自定义模型与数据库实例化

【摘要】:使用自定义模型,通常情况下也是需要与数据库的真实表名进行映射,这是MVC的一条规范,否则模型就与普通的功能类无异。在调用时,系统提供了D函数,用于快速实例化自定义模型。使用自定义模型之后,在进行数据表操作时就更加灵活。自定义模型的最大特点是代码容易移植,高度重用。

Model类提供了一些基础的数据库操作方法,当需要进行复杂的数据库操作时,就需要使用自定义模型了。自定义模型能够实现更加灵活和强大的数据库操作,特别是能够针对项目一些特殊的功能定制数据库操作方案,例如数据检验、数据缓存、数据加工等。使用自定义模型,通常情况下也是需要与数据库的真实表名进行映射,这是MVC的一条规范,否则模型就与普通的功能类无异。在调用时,系统提供了D函数,用于快速实例化自定义模型。下面将结合示例代码介绍自定义模型的创建和使用。

1.创建自定义模型

自定义模型存放于项目Lib/Model目录下,假设需要为数据表tpk_article数据表建立模型映射,那么需要创建ArticleModel.class.php文件。创建完成后,在使用D函数进行实例化时,ArticleModel模型将与tpk_article表进行映射。由于所有模型都需要继承于Model基类,所以ArticleModel拥有Model所有特性,这里将使用select()方法输出tpk_article表数据,如以下代码所示。

978-7-111-42852-7-Part02-187.jpg

使用自定义模型之后,在进行数据表操作时就更加灵活。比如需要让tpk_article表的内容能够根据客户所在的地区显示当地的新闻,那么就可以在ArticleModel模型中对数据进行加工和处理,如以下代码所示。

978-7-111-42852-7-Part02-188.jpg

978-7-111-42852-7-Part02-189.jpg

图7-1 tpk_article表结构(www.chuimin.cn)

上述代码中,使用了$this->where连贯操作,该语句对SQL查询语句中的where进行了封装,实际上效果是等同的。在where查询条件中,限制返回数据条件为当前地区的新闻,checkUserArea是一个自定义方法,用于根据客户端IP,自动取得当前用户所在的区域,作为一个功能方法不需要对外公开,所以修饰为protected。ArticleModel模型对应的tpk_article数据表结构如图7-1所示。

2.使用自定义模型

使用自定义模型非常简单,系统提供了D函数,用于快速实例化自定义模型。以前面创建的示例为例,在动作中只需要调用article方法即可,如以下代码所示。

978-7-111-42852-7-Part02-190.jpg

这里只是简单地演示自定义模型影射数据表的过程。可以看到,使用自定义模型映射数据表比直接使用基类的模型映射更加灵活和强大。事实上这种方式在主流的MVC中使用得最广泛,甚至是必须这样做,例如前面章节介绍过的Zend Framework、Symfony、CakePHP等。使用自定义模型能够实现更复杂及更高级的功能,这里只是简单地演示其使用步骤,在实际应用开发中可以根据需求利用自定义模型对数据进行深度的加工、处理等。

自定义模型映射,一个模型对应一个数据表。所有增、删、改、查都在模型类中完成,大大地方便了文件及代码的管理。自定义模型的最大特点是代码容易移植,高度重用。例如一个客户端只能访问XML格式数据,此时自定义模型一句代码都不用更改,只需要改变动作中的输出格式即可。

这里需要说明的是,在ThinkPHP中模型代码是可以直接移植到动作中的,但这样就让代码的重复利用变差,代码的管理、维护变得困难,所以建议读者尽量将数据库操作的逻辑封装到自定义模型中,这也是MVC编程所提倡的思想。