Drupal 9打开媒体页面触发TypeError错误的排查求助
Drupal媒体页面打开报错解决方案
问题描述
打开Drupal媒体页面时触发TypeError,核心错误信息如下:
TypeError: Argument 1 passed to Drupal\Core\Entity\Sql\DefaultTableMapping::requiresDedicatedTableStorage() must implement interface Drupal\Core\Field\FieldStorageDefinitionInterface, null given, called in E:\work\xampp_74\htdocs\Drupal\slac-it\web\core\lib\Drupal\Core\Entity\Sql\DefaultTableMapping.php on line 334 in E:\work\xampp_74\htdocs\Drupal\slac-it\web\core\lib\Drupal\Core\Entity\Sql\DefaultTableMapping.php on line 535
已知前提:
- 相同代码连接新数据库时可正常运行
- 新旧数据库均存在media表
- 当前使用Drupal官方media模块
解决方案
- 检查字段存储定义一致性:新、旧数据库的media实体字段存储定义可能存在差异。通过
drush entity:check命令(或后台「配置→开发→状态报告」)检查实体字段状态,重点确认changed字段的存储定义是否存在(错误栈显示排序操作依赖该字段)。 - 同步数据库结构:执行数据库更新操作,确保旧数据库的实体结构与代码定义一致。运行
drush updatedb命令,或通过后台「配置→开发→数据库更新」页面完成同步。 - 重建系统缓存:Drupal的实体元数据缓存可能过期,导致无法正确加载字段定义。运行
drush cache:rebuild命令,或在后台「配置→开发→性能」页面清除所有缓存。 - 校验media_field_data表完整性:虽然media表存在,但错误中涉及的
media_field_data表可能存在字段缺失或结构异常。对比新旧数据库中该表的结构,确保changed字段存在且类型为int(存储时间戳)。 - 同步实体配置:若以上步骤无效,可导出新数据库的media实体配置(
drush config:export --directory=../config-sync),再导入到旧数据库环境(drush config:import),保证实体配置完全一致。
内容的提问来源于stack exchange,提问作者Bhavesh
相关产品推荐
相关产品推荐

