每当我尝试从 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_config
和 field_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_deleted
和field_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/