alex-kalanis/kw_mapper

KWCMS中资源访问的映射器

v3.0.0 2024-04-01 13:30 UTC

README

Build Status Scrutinizer Code Quality Latest Stable Version Minimum PHP Version Downloads License Code Coverage

映射记录及其条目到其他对象,如表或文件。您可以选择多个来源 - 本地或远程存储中的原始文件,SQL和NoSQL数据库。

kw_mapper是一个具有分离的映射器、记录和条目层的ORM,允许它动态交换映射器,并针对不同类型的数据存储(如文件或数据库)进行优化。因此,可以使用单个记录处理多个存储中的数据,并且其行为几乎相同。

基本层是记录(类似于数据库中的行),其中包含条目(类似于具有数据的每个数据库列)。映射器本身位于外部,并告诉如何将记录中的数据转换为存储格式,并返回。

有许多可用的存储

  • MySQL/MariaDB(显然)
  • SqLite(适用于需要SQL引擎的小型项目)
  • Postgres(适用于大型项目,其中MySQL存在问题)
  • MS SQL(适用于商业和Azure等东西)
  • MongoDb(适用于SQL讨厌者)
  • 文件中的简单表
  • CSV文件
  • INI文件
  • YAML文件
  • JSON字符串
  • 以及通过一些调整,还有更多(Odbc,Dba及其连接,Oracle,Ldap等)

您还可以在记录级别限制用户输入,或者在存储级别设置限制。但请记住,每个存储对不希望的输入都有不同的行为!

主要区别

与竞争对手相比,主要区别是什么?首先,数据源。在竞争对手那里,通常只有一个数据源 - 预设数据库。这可能拥有更多数据源。所以通常有更多的数据库连接。您可以在Postgres中设置主要存储,但身份验证可以来自LDAP,并请求远程JSON数据。

另一个是文件。这个映射器是针对文件构建的。文件本身的行为就像另一个数据源。其内容可以像原始数据一样访问,也可以像另一个表一样访问。

有了这两点,这个映射器非常适合在存储之间转换数据。

下一个是只允许映射器访问原始查询。这使得您必须针对每个数据源引擎分别符合自定义查询。因此,您不能为文件和不同类型的数据库使用相同的复杂“连接”查询。

然后是深度连接。因此,您可以使用搜索来访问某些数据源中存储的更深层记录,并在构建的查询中通过它们进行过滤。不再需要仅通过当前记录的关系进行浅层查找!

另一个是关系。这里是一个数组。始终是数组。没有额外的检查或定义,如果它是1:1、1:N或M:N。它是一个数组。就这样。它可以空,也可以包含内容。它比oneToMany等定义更通用。在父项目中已经证明这是更简单的方法。

PHP安装

composer.phar require alex-kalanis/kw_mapper

(如果您不熟悉composer,请参阅Composer文档

PHP用法

1.) 使用您的自动加载器(如果尚未通过Composer自动加载器完成)

2.) 添加一些与本地或远程服务连接的外部包。

3.) 将“kalanis\kw_mapper\Records\ARecord”连接到您的应用程序。根据您的用例扩展它。

4.) 通过包内部的接口扩展您的库。

5.) 只需调用设置和渲染

如果您想了解更多信息,只需打开examples/目录,查看那里的代码。

注意事项

大多数数据库方言在更新或删除时没有限制 - 而是一种间接的方法,通过使用数据库中方言未知的主列获取子查询来限制选择。

另一个例子是在定义具有相同别名的子项时 - 您不能在一个查询中请求它们,否则它们会相互交织,导致数据损坏。在最好的情况下。为此,有可用的子项方法,允许您在需要从已使用的表进行连接时定义别名来传递数据。

可能的未来功能

  • 跨数据源访问数据作为一大块数据。不像现在跨数据源的查询会失败。如预期的那样。
  • 扩展可用的数据源及其方言
  • 扩展平台特定数据源的处理和覆盖。