alex-kalanis / kw_mapper
KWCMS中资源访问的映射器
Requires
- php: >=7.4.0
- ext-ctype: *
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- ext-pdo: *
- alex-kalanis/kw_files: >=4.0 <5
- alex-kalanis/kw_paths: >=4.0 <5
- alex-kalanis/kw_storage: >=5.0 <6
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: >=8.0 <=9
- shipmonk/composer-dependency-analyser: ^1.4
Suggests
- ext-com_dotnet: Connect to Win API via .Net platform
- ext-dba: Content stored in DBA
- ext-ldap: Access to LDAP database
- ext-mongodb: Content stored in MongoDB
- ext-mysqli: Older connection to MySQL database
- ext-odbc: Content accessible via ODBC
- ext-pdo: Content stored in database
- ext-win32std: Connect to Win32 API via external library
- ext-yaml: Content encoded in YAML
- alex-kalanis/kw_storage: Local storage for accessing resources
README
映射记录及其条目到其他对象,如表或文件。您可以选择多个来源 - 本地或远程存储中的原始文件,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/
目录,查看那里的代码。
注意事项
大多数数据库方言在更新或删除时没有限制 - 而是一种间接的方法,通过使用数据库中方言未知的主列获取子查询来限制选择。
另一个例子是在定义具有相同别名的子项时 - 您不能在一个查询中请求它们,否则它们会相互交织,导致数据损坏。在最好的情况下。为此,有可用的子项方法,允许您在需要从已使用的表进行连接时定义别名来传递数据。
可能的未来功能
- 跨数据源访问数据作为一大块数据。不像现在跨数据源的查询会失败。如预期的那样。
- 扩展可用的数据源及其方言
- 扩展平台特定数据源的处理和覆盖。