drupal - 无法从内容类型中删除字段

标签 drupal drupal-8

每当我尝试从 ANY 内容类型中删除 ANY 字段时,都会收到以下错误:

Uncaught PHP Exception Drupal\\Core\\Database\\DatabaseExceptionWrapper: "SQLSTATE[42S02]: Base table or view not found: 1146 Table 'drupal.field_deleted_data_35ab99eaa1' doesn't exist: SELECT DISTINCT t.entity_id AS entity_id\nFROM \n{field_deleted_data_35ab99eaa1} t\nWHERE bundle = :db_condition_placeholder_0\nLIMIT 10 OFFSET 0; Array\n(\n    [:db_condition_placeholder_0] => slider_images\n)\n" at /var/www/html/web/core/lib/Drupal/Core/Database/Connection.php line 685

唯一的区别是表哈希数据,即deleted_data_xxxx,我尝试删除的每个字段都引用不同的表。我尝试过重新安装 Drupal 并重新导入我的配置,但没有成功。

有什么建议吗?

更新: 检查数据库后发现有很多这样的表: field_deleted_revision_df347fb61b 和 field_deleted_df347fb61b

如果这有什么区别的话。

最佳答案

我也经历过这个,深入研究代码。我发现这就是您删除字段后未删除的所有原因,如下:

  • 执行 cron 无数次

field_configfield_config_instance 中的条目在已删除列中的值可能为 1

这意味着它们被标记为删除,但在您运行 cron 之前不会真正被删除(已删除的字段数据在 field_cron() 中被清除)。

作为运行 cron 来删除已删除数据的替代方法,您可以手动运行 field_purge_batch($batch_size)

要使用的 $batch_size 将根据您的服务器环境和需求而有所不同。我使用的值低至 5,高至 10000。

Here more informations关于 field_purge_batch() 函数。


这里有一个可能的解决方案来解决您的问题,但首先备份您的数据库。不要偷懒,如果出现问题,它会救你的命。

使用drush:

drush eval "field_purge_batch(500)"

您可能需要运行几次,或者增加$batch_size,那么即使在之后,可能仍然存在field_deletedfield_deleted_revision表运行计划任务

使用 SQL 查询:

SELECT * FROM `field_config` WHERE `deleted` = 1
SELECT * FROM `field_config_instance` WHERE `deleted` = 1

如果你发现空了,你可以安全地删除那些剩余的表。

关于drupal - 无法从内容类型中删除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46105945/

相关文章:

drupal-8 - Drupal CSS 文件行为

php - 应用 Composer 的 Drupal 8 补丁修复签名字段上的多个字段

drupal - 如何在选项卡中显示节点字段?

php - 学习多个内容管理系统的成本/ yield

database - 如何将 CURRENT_TIMESTAMP 插入到 PostgreSQL 配置的 Drupal 安装中

php - 错误 : Undefined class constant 'MYSQL_ATTR_USE_BUFFERED_QUERY'

drupal - 以编程方式在 Drupal 的文件系统中插入文件?

drupal - 如何从代码运行 drush 命令

user-profile - 如何在 Drupal 8 的用户配置文件页面上添加自定义 HTML?

drupal-8 - 如何在用户注册中禁用个人联系表显示