Drupal 7模块如何定义数据库表和定义更新

By admin, 24 二月, 2017

一般的PHP框架并没有一套机制去定义数据库表,通常是自己通过phpMyAdmin直接创建,或者把创建的语句写成SQL保存下来并执行。这个方式对于只维护一个网站问题不大。但如果要做成一个通用的插件,或者说这件事要在成千上万的网站上做就有问题了。

Drupal 7里,我们自己的模块如果要新增数据表,可以先在phpMyAdmin里创建。然后通过结构->schema->inspect来查看这个表在Drupal里的表示方式,如下图:

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代码。

“管理菜单->报告->状态报告”里有一项是检查系统有没有需要打的补丁的,如果有,管理员就可以点击里面的链接打补丁升级系统。这一个机制保证了系统不会遗漏任何一个模块的修改,可以更好地维护多站点。

标签

评论

Restricted HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id> <img src>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。
验证码
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
请输入"Drupal10"