一般的PHP框架并没有一套机制去定义数据库表,通常是自己通过phpMyAdmin直接创建,或者把创建的语句写成SQL保存下来并执行。这个方式对于只维护一个网站问题不大。但如果要做成一个通用的插件,或者说这件事要在成千上万的网站上做就有问题了。
Drupal 7里,我们自己的模块如果要新增数据表,可以先在phpMyAdmin里创建。然后通过结构->schema->inspect来查看这个表在Drupal里的表示方式,如下图:
我们新增的表会出现在Unknown区域,复制代码。
创建一个mymodule.install文件(mymodule需要根据我们的模块名而变),代码如下:
<?php
function mymodule_schema() {
// 这里粘贴上面复制的代码
return $schema;
}
当模块启用的时候,Drupal会检查模块的install文件,根据表定义创建数据表。
如果过了一段时间,我们需要增加表或者修改表的字段,可以通过打补丁的方法完成。例如:
/**
* Add dorm index
*/
function mymodule_7018() {
db_add_index('weike_school_users', 'building', array('building', 'room', 'bed'));
}
这一段代码的注释不应该缺少,因为在Drupal运行补丁前,会把补丁代码之前的注释作为补丁的描述显示在网页上,否则管理员就不知道补丁是什么用途。
7018是补丁的编号,7是指Drupal 7,18是第18个补丁。Drupal内部有数据表记录每一个模块补丁的编号,如果18号补丁打完,那么就应该往上增加编号,否则新补丁不会被打上去。这里的补丁除了执行数据表操作外其实可以运行任何的PHP代码。
“管理菜单->报告->状态报告”里有一项是检查系统有没有需要打的补丁的,如果有,管理员就可以点击里面的链接打补丁升级系统。这一个机制保证了系统不会遗漏任何一个模块的修改,可以更好地维护多站点。
评论