淘小兔

自己编写的Drupal模块,有时候需要对数据库表进行修改,但是又不想抹掉已经在数据库中存有数据的表格,就要用到hook_update_N()。

 

步骤:

1。在模块的 .install 文件夹下添加hook_update_N()的钩子. 按照drupal官网文档上的命名规则,建议用version版本号来定义N是多少。例如,如果.info里version = ‘6.x-1.2', 那么function名可以定义为 xxxx_update_6012()

 

2.  以下是几种修改数据库表的例子

 

- Adding a new column

 

Php代码  
  1. <?php  
  2. function mymodule_update_6100() {  
  3.   $ret = array();  
  4.   db_add_field($ret'mytable1''newcol'array('type' => 'int''not null' => TRUE));  
  5.   return $ret;  
  6. }  
  7. ?>  

 

 

- Add a new table

 

Php代码  
  1. <?php  
  2. function mymodule_update_6101() {  
  3.   $schema['mytable2'] = array(  
  4.      // table definition array goes here  
  5.   );  
  6.   $ret = array();  
  7.   db_create_table($ret'mytable2'$schema['mytable2']);  
  8.   return $ret;  
  9. }  
  10. ?>  

 

 

 

- Add a new key

 

Php代码  
  1. <?php  
  2. function mymodule_update_6102() {  
  3.   $ret = array();  
  4.   db_add_unique_key($ret'mytable2''mykey'array('field1''field2'));   
  5.   return $ret;  
  6. }  
  7. ?>  

 

 

3. 添加完成之后,进入update.php,点击continue,在 Select version里就能看到了。

注意:Drupal 6 有一个bug, 如果module的名字里包含大写字母,在select version里会找不到这个模块的更新版本。解决方法是,在includes/install.inc文件里,添加一行代码,如下:

 

Php代码  
  1. function drupal_get_schema_versions($module) {  
  2.   。。。  
  3.   $module = strtolower($module); //加上这一行  
  4.   foreach ($functions['user'as $function) {  
  5.   。。。  
  6. }  

 

下载仅供下载体验和测试学习,不得商用和正当使用。

下载体验

请输入密码查看内容!

如何获取密码?

 

点击下载