conserto/pomm-cli

Pomm 的命令行工具。

3.0.2 2024-01-05 14:27 UTC

README

这是 Pomm 数据库框架的 Cli 组件的分支。

Latest Stable Version CI Status Monthly Downloads License

配置

Pomm 的 Cli 与开发环境独立,它不知道项目中使用哪些配置类型和文件。为了让 Cli 工作,需要创建一个返回 Pomm 实例的纯 PHP 引导文件。默认名称为 .pomm_cli_bootstrap.php。如果项目已经有一个返回配置好的 Pomm 实例的脚本,可以使用选项 -b|--bootstrap-file="..." 来指定它。

数据库检查

inspect 命令使用 Foundation.Inspector 来显示数据库结构信息。

  • pomm:inspect:database - 获取数据库中的模式。
  • pomm:inspect:schema - 获取模式中的关系信息。
  • pomm:inspect:relation - 获取关于关系的信息。
$ ./bin/pomm.php pomm:inspect:schema my_db_config

Found 3 relations in schema 'public'.
+-------------+-------+--------+---------+
| name        | type  | oid    | comment |
+-------------+-------+--------+---------+
| pika        | view  | 126516 | pika    |
| test_unique | table | 127619 |         |
| worker      | table | 126525 |         |
+-------------+-------+--------+---------+
$ ./bin/pomm.php pomm:inspect:relation archived_document my_db_config pylone

Relation pylone.archived_document
+----+-------------+-----------+---------+---------+---------+
| pk | name        | type      | default | notnull | comment |
+----+-------------+-----------+---------+---------+---------+
| *  | document_id | uuid      |         | yes     |         |
|    | title       | varchar   |         | yes     |         |
|    | archived_at | timestamp | now()   | yes     |         |
| *  | version     | int4      |         | yes     |         |
|    | usable      | bool      |         | no      |         |
+----+-------------+-----------+---------+---------+---------+

代码生成

generate 命令为使用 Pomm 的 ModelManager 包与数据库关系创建 PHP 类。

  • pomm:generate:structure - 根据关系结构生成 RowStructure 类。
  • pomm:generate:model - 生成新的配置 Model 类。
  • pomm:generate:entity - 生成空的 FlexibleEntity 类。
  • pomm:generate:relation-all - 为给定的关系生成上述 3 个文件。
  • pomm:generate:schema-all - 为给定模式中的每个关系生成上述 3 个文件。

由于您将在生成的 Model 和 FlexibleEntity 类中添加自己的方法,因此默认情况下,generate 命令不会覆盖它们。可以通过隐式指定选项 --force 来实现这一点。所有覆盖的类中的代码都将丢失并替换为全新的类。结构文件始终在未经确认的情况下覆盖。为了避免这两种类的混合,结构类将保存在 AutoStructure 子目录下。

前缀选项

默认情况下,Pomm 的 ModelManager 期望至少使用以下命名空间保存类:DatabaseConfigName\SchemaSchema。可以告诉 Cli 这个结构从哪里开始以及如何调整。

  • --prefix-dir, -d - 表示命名空间目录树的起始位置。
  • --prefix-ns, -a - 表示可选的命名空间前缀。

当没有指定选项时,生成公共模式的全部关系将像以下这样

$ ./bin/pomm.php pomm:generate:schema-all -v pomm_test
 ✓  Creating file './PommTest/PublicSchema/AutoStructure/Pika.php'.
 ✓  Creating file './PommTest/PublicSchema/PikaModel.php'.
 ✓  Creating file './PommTest/PublicSchema/Pika.php'.
 ✓  Creating file './PommTest/PublicSchema/AutoStructure/TestUnique.php'.
 ✓  Creating file './PommTest/PublicSchema/TestUniqueModel.php'.
 ✓  Creating file './PommTest/PublicSchema/TestUnique.php'.
 ✓  Creating file './PommTest/PublicSchema/AutoStructure/Worker.php'.
 ✓  Creating file './PommTest/PublicSchema/WorkerModel.php'.
 ✓  Creating file './PommTest/PublicSchema/Worker.php'.

$ tree PommTest
PommTest/
└── PublicSchema
    ├── AutoStructure
    │   ├── Pika.php
    │   ├── TestUnique.php
    │   └── Worker.php
    ├── PikaModel.php
    ├── Pika.php
    ├── TestUniqueModel.php
    ├── TestUnique.php
    ├── WorkerModel.php
    └── Worker.php

2 directories, 9 files

将模型命名空间放在项目根目录通常不是一个好主意。大多数情况下,它被放在 sources/lib 目录下的 Model 命名空间中。

$ ./bin/pomm.php pomm:generate:schema-all --prefix-dir sources/lib --prefix-ns Model pomm_test
 ✓  Creating file 'sources/lib/Model/PommTest/PublicSchema/AutoStructure/Pika.php'.
…