Answers:
hook_schema()
Drupal 8模块仍使用来创建模块中使用的自定义数据库表。即使用户和节点模块也可以实现它,尽管它们user_schema()
并node_schema()
没有为以不同方式创建的各个实体定义模式。
该配置模式不用于创建自定义数据库表模块使用,但介绍的配置文件的结构。我链接的文档中找到的PDF文件使配置文件及其架构之间的关系更加清晰。
内容实体不使用hook_schema()
; Drupal基于内容实体类定义的基础字段为它们创建数据库表。
使用哪种方法取决于模块定义的内容。这取决于模块定义内容实体,配置实体还是仅使用自定义表。一个模块甚至可以全部使用它们。
如果确实需要,您可以使用钩子安装来创建自己的表,尽管Drupal还有许多其他现成的解决方案。但是,如果您想自己动手,则示例模块中有一个名为dbtng_example的示例模块:https ://www.drupal.org/project/examples,并提供用于添加和删除自定义数据库条目的路由。
我建议安装并尝试使用它,然后您可以将其用作在Drupal 8中创建自己的数据库表的基础。
要考虑的另一种方法是创建配置实体或内容实体。
如果使用drupal命令行工具,甚至还有一个用于生成这些“ drupal generate:entity:config”和“ drupal generate:entity:content”的命令。
同样在示例模块中,还有config_entity_example和content_entity_example。
来自https://www.previousnext.com.au/blog/understanding-drupal-8s-config-entities:“内容和配置实体之间的主要区别在于它们的存储方式,(目前)配置实体不适用”。
还有其他一些开箱即用的解决方案,例如config_pages模块,可让您轻松地扩展位置以在站点上存储数据:https ://www.drupal.org/project/config_pages
我们最近通过创建控制器和路由将这些用于一个登陆页面。与自定义表相比,这具有巨大的优势,因为您可以轻松添加新字段,并且可以轻松使用图像和实体引用之类的数据类型,还可以设置字段格式化程序,并使用config_pages实体视图构建器加载格式化的数据。
hook_schema
仍然是在Drupal 8中创建内容实体或字段未描述的自定义表的方法。如果您的自定义表是您可以考虑的“内容”,那么我将使用实体,但是如果它需要更快并且行数有限并且您不对前端进行任何缓存,那么可以使用自定义表很好 您还应该考虑该表是否为“配置”,在这种情况下,配置实体或对象才是可行的方式。