conserto / pomm-cli
Pomm 的命令行工具。
Requires
- php: >=8.1
- ext-pgsql: *
- conserto/pomm-foundation: ^3.0
- conserto/pomm-model-manager: ^3.0
- psr/log: ^2.0 || ^3.0
- symfony/console: ~5.0|~6.0|~7.0
Requires (Dev)
- atoum/atoum: ^4.0
- phpstan/phpstan: ^1.8
- symfony/filesystem: ~5.0|~6.0|~7.0
This package is auto-updated.
Last update: 2024-09-05 15:57:02 UTC
README
这是 Pomm 数据库框架的 Cli 组件的分支。
配置
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'.
…