无法将列添加到重命名的表 -- database 领域 和 updating 领域 drupal 相关 的问题

Can't add column to renamed table


0
vote

问题

中文

当我在内部开发这个模块时(不在druple.com上) module_schema 函数创建了一个具有相同名称的表(这是唯一的表,所以它是有道理的。短瞄准。)。

但我现在需要一个第二表,所以第一个表应该有更明智的名称。还需要原始表中的附加字段。

   function afd_pce_update_dependencies(){    // update_7201 needs to run after update_7200.    $dependencies['mymodule_field_mappings'][7201] = array(      'mymodule_field_mappings' => 7200,    );     return $dependencies;  }   function mymodule_update_7200(){       db_rename_table('mymodule', 'mymodule_field_mappings');     }   function mymodule_update_7201(){    $spec = array(      'type' => 'varchar',      'description' => "The fieldset that this mapping belongs to",      'length' => 15,      'not null' => FALSE,    );    db_add_field('fieldset_type','mymodule_field_mappings',$spec);  }   

当我运行 update.php 我收到错误

  Update #7201 Failed: DatabaseSchemaObjectDoesNotExistException: Cannot add field <em class="placeholder">fieldset_type</em>. <em class="placeholder">mymodule_field_mappings</em>: table doesn't exist.  in DatabaseSchema_mysql->addField() (line 325 of {filepath}includesdatabasemysqlschema.inc).   
英文原文

When I first developed this module internally (not on Druple.com) the module_schema function created a table with the same name of the module (it was the only table, so it made sense. Short sighted.).

But I now need a 2nd table, so the first table should have a more sensible name. There is also a requirement for an additional field in the original table.

 function afd_pce_update_dependencies(){    // update_7201 needs to run after update_7200.    $dependencies['mymodule_field_mappings'][7201] = array(      'mymodule_field_mappings' => 7200,    );     return $dependencies;  }   function mymodule_update_7200(){       db_rename_table('mymodule', 'mymodule_field_mappings');     }   function mymodule_update_7201(){    $spec = array(      'type' => 'varchar',      'description' => "The fieldset that this mapping belongs to",      'length' => 15,      'not null' => FALSE,    );    db_add_field('fieldset_type','mymodule_field_mappings',$spec);  } 

When I run update.php I get the error

Update #7201 Failed: DatabaseSchemaObjectDoesNotExistException: Cannot add field <em class="placeholder">fieldset_type</em>. <em class="placeholder">mymodule_field_mappings</em>: table doesn't exist.  in DatabaseSchema_mysql->addField() (line 325 of {filepath}\includes\database\mysql\schema.inc). 
     

回答列表

1
 
vote
vote
最佳答案
 

我认为在 hook_update_dependencies() 中混合表名称和模块名称。

首先,您不需要 hook_update_dependencies() 以声明自己的模块内的依赖关系。更新将始终按顺序运行,以便 mymodule_update_7200() 始终在 mymodule_update_7201() 之前运行。

然后,如果要使用 hook_update_dependencies() ,您将使用它来声明模块间折扣,如下所示:

  function mymodule_update_dependencies(){   $dependencies['mymodule'][7201] = array(     'other_module' => 7203,   );   return $dependencies; }   

现在到你的错误。您可以查看模块的系统表记录当前的架构版本是什么?来自代码和错误消息我会假设,数据库已经在Schema 7200(至少正式),但不知何故尚未完成重命名。是否可能您可以手动更改数据库?

编辑:您将参数混在于 db_add_field 。它必须是 db_add_field('mymodule_field_mappings', 'fieldset_type', $spec);

 

I think your mixing up table names and module names in hook_update_dependencies().

First of all, you don't need hook_update_dependencies() to declare dependencies inside your own module. The updates will always be run sequentially, so that mymodule_update_7200() will always run before mymodule_update_7201().

Then, if you want to use hook_update_dependencies(), you would use it to declare inter-module depenencies like this:

function mymodule_update_dependencies(){   $dependencies['mymodule'][7201] = array(     'other_module' => 7203,   );   return $dependencies; } 

Now to your error. Can you check in the system table record for your module what the current schema version is? From the code and the error message I would suppose, that the database is already at schema 7200 (at least officially) but that somehow the renaming has not been done. Is it maybe possible that you have altered the database manually?

Edit: You are mixing up the arguments to db_add_field. It must be db_add_field('mymodule_field_mappings', 'fieldset_type', $spec);

 
 
   
   

相关问题

1  在执行数据库模式更新时会导致CSS禁用什么?  ( What would cause css to become disabled when performing a database schema update ) 
我正在使用它们的eCosite服务在Greengeeks上运行Drupal 7.26。 除了Drupal Core文件,我使用以下模块: 上下文 delta webform ctools imce imce_wysiwyg omega_tools 有更多的模块,但是标准的标准,如令牌,视图...

0  从URL_ALIAS选择后如何更新URL_ALIAS  ( How to update url alias after select from url alias ) 
在以前的开发人员迁移相当笨拙的迁移后,我的新客户网站有一大堆不正确的路径,我想在批量中更新(近7000个节点,所以我不会用手做这个) 。 特别是,根据需要,他们的论坛主题是别名的"/ content / 12345" ,而不是"论坛/ 12345" 。 我几乎想到了如何直接在mysql中做到这一点,但我打了一个障碍 ...

0  某些数据库表有DR_前缀  ( Some database tables have dr prefix ) 
您好香港专业教育学院现在已经摆弄德鲁巴8年和IM仍然没有拿到一个网站去住:(经过约10我的新网站的想法重新安装我正要去住,然后我有一个凌晨看看在数据库和IVE中注意到一部块的表预混_ 我知道一些柔软的安装加上这个db前缀。 我的网站足够好,但按附加的表预先提示是担心的。他们应该担心我吗? 我可以很容易地修复吗? 感...

0  尝试重新安装规则模块后的数据库损坏  ( Database corruption after trying to reinstall rules module ) 
我在尝试运算规则UI时获得了数据库错误,因此我试图重新安装模块。我卸载了规则模块和规则UI模块然后尝试安装规则模块,现在站点的每个页面都提供此错误: Additional uncaught exception thrown while handling exception. Original PDOExcep...

3  恢复数据库后,为什么我的网站失败了?  ( Why does my site fail after restoring the database ) 
我尝试将我的Drupal Live Site迁移到LocalHost以在那里测试它。我按照迁移一个站点 清除了缓存 已禁用清洁URL 已启用mod_rewrite 然后我备份了我的实时站点数据库。在我的localhost上,我创建了一个与我的实时站点相同名称的数据库,并运行Drupal 7.25的清洁安装。...

0  创建备份MySQL数据库,沿着功能模块  ( Create backup of mysql database alongside features module ) 
与其他开发人员合作时,我们使用功能模块并将其推到存储库,以这种方式可以将文件拉到开发人员自己的开发环境。 我们的问题是数据库。我们所做的是导出SQL转储并发送它。然后导入SQL转储。 处理数据库备份是否有更好的方法?由于我认为功能模块无法导出数据库。 ...

0  很多生成的查询  ( Lots of generated queries ) 
我启用了devel到显示查询log 更新:此问题仅适用于Logged Users 我发现 Frontpage 生成900个查询。 **67** of them generated by the **Locale** module 和 **480** of them are of the ...

0  漫长的等待网站和太多CPU + Memory [已关闭]  ( Long wait time for website and taking too much cpumemory ) 
关闭。这个问题需要更多聚焦。它目前不接受答案。 想要改进这个问题?更新问题,因此它仅介绍了编辑此帖子。 关闭 7年前。 ...

6  防止SQL注入  ( Preventing sql injection ) 
在Drupal 6中,使用 998887663 发出查询。使用%-modifiers,查询参数被归类为归滤后被替换为查询。字符串%s(only字符串)最终通过 mysqli_real_escape_string() (使用 db_escape_string() )。 查看 mysqli_real_escape_...

3  在6到7升级期间,一些未转换为InnoDB的Myisam表  ( Some myisam tables not converted to innodb during 6 to 7 upgrade ) 
当我使用升级脚本从Drupal 6升级到Drupal 7时,我在Impression MyISAM表将被转换为InnoDB。似乎是这种情况。表格,节点和块等表格仍然是MyISAM。如缓存和字段_ *等表格为InnoDB。 据我所知,最好使用InnoDB的做法。我的网站是一个博客和论坛,因此用户正在发表评论,创建节点和...

0  子域与用户共享数据库:子域未访问主数据库  ( Subdomain with shared database for users subdomain not accessing primary databa ) 
我已成功设置多路耳机安装。我现在有: www.example.com - &gt;主场 sub.example.com - &gt;辅助站点 但是,我希望用户要共享。我知道有关共享数据库和前缀,但根据设置中的注释,您还可以使用前缀来访问不同的数据库。我想选择那个根。 所以我的主站点进入主数据库,子域进入辅助数据...

0  从模块中的数据库显示和选择数据  ( Displaying and selecting data from a database in a module ) 
我有一个数据库表(gpx_api),带有以下字段: runID userID score distance pace speed gpx_path missionID startTime duration 我想在模块中显示所有这些字段。 我在堆栈上搜索了很多,我才...

1  如何在视图页面中插入自定义搜索字段  ( How to insert a custom search fields in a views page ) 
我有一个显示一些书籍的视图,我希望在本页顶部的搜索标准进行高级搜索。搜索框应该在书页面或书籍内容类型内搜索。 ...

3  清除Drupal缓存的替代方法  ( Alternative ways to clear the drupal cache ) 
我们有一个忙碌的数据库服务器,当我们尝试在drupal上清除缓存时,drupal尝试 TRUNCATE 缓存表,这导致积压,直到mysql击中最大用户连接数量(哪个是800)。这导致我们的问题。 就我们可以说,问题是由锁在表截断期间引起的。 是否有任何替代方法可以清除缓存,可以帮助避免这种情况? ...

1  在表中的位置,它存储了/ drupal / foo实际/ node / 47,以便质量查询删除/ drupal并留下/ foo部分?  ( Where in the table is it stored that drupal foo is actually node 47 in order t ) 
/ drupal在所有网站上被打破,但我想进入数据库和大规模查询以删除/ drupal并留下/ foo部分。 ...

0  多个数据库:存储远程数据库中的用户  ( Multiple databases store users in remote database ) 
我希望有一个有两个不同的数据库的网站:一个应该存储用户等应该存储其余的。数据库位于独立服务器上。 我知道在Settings.php中可以有几个数据库连接。但是如何告诉用户模块不使用默认值? ...

1  更新MySQL表OG_MEMBERSHIP,如何更新DRUPAL而不清除所有缓存  ( Update mysql table og membership how to then update drupal without clear all ca ) 
drupal,我无法弄清楚这个。我公司希望更新用户组的外部方式,我发现该组位于Og_Memebership和更新 UPDATE og_membership SET gid = @gid WHERE etid= @uid 我能够更新MySQL中的所有相应行,但它不会更新Drupal,旧组留下,直到我做'刷新...

1  如何重用查询条件?  ( How to reuse query conditions ) 
我有一个半新的Drupal 7网站,其中管理员批准了管理者的账目,管理人员批准其员工的帐户。这都是很好的。我被要求制作它,以便管理者可以删除不再需要的员工帐户。 使用我们的旧CMS,当我们所有的SQL都写着时,我可以构建一个"在哪里" 语句,如: $cWhere = "WHERE e.department = ...

3  PDOException错误 - Google AdWords转换模块  ( Pdoexception error google adwords conversion module ) 
我的drupal网站是一个严重的问题。每当我尝试添加内容,例如基本页面时,我会收到此错误: p> podeprexception:sqlstate [42s22]:未找到列:1054"字段列表" 的未知列'field_adwords_conversion_id':插入到{field_data_field_adwo...

3  Drupal 7 PDOException错误说我缺少表格或查看mysite_drupal.cache_views [已关闭]  ( Drupal 7 pdoexception error saying im missing a table or view mysite drupal cac ) 
此问题似乎在帮助中心中定义的范围内涉及Drupal。。 想要改进这个问题?更新问题,所以它是关于drupal答案的主题。 ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.