jhavenz / laravel-migration-table-parser
使用 nikic/php-parser 从 Laravel 迁移文件中提取表名
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0
- nikic/php-parser: ^5.1
- prewk/result: ^4.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- rector/swiss-knife: ^0.2.17
- spatie/laravel-ray: ^1.35
README
借助 nikic/php-parser 从 Laravel 迁移文件中提取表名(s)
基本用法
此包检查迁移文件中 up/down 方法使用的代码。
use Jhavenz\LaravelMigrationTableParser\Facades\MigrationTableParser; $result = MigrationTableParser::parse($file);
$result 是一个类型为 \Jhavenz\LaravelMigrationTableParser\ParserResult 的值对象
$optionalTable = $result->search('my_table');
$optionalTable 是一个 \Prewk\Option 实例,这是一个受 Rust 启发的 Some/None 摩纳德。 了解更多
$tablesFoundCollection = $result->tables();
$tablesFoundCollection 是一个 \Illuminate\Support\Collection<string> 实例
深入了解 /tests 以获取更多信息
实现说明
你可以在你的迁移文件中运行任何其他逻辑,但表名是在你调用这些方法之一时提取的
->drop('users');->dropIfExists('users');->table('users', function (Blueprint $table) {...});->create('users', function (Blueprint $table) {...});在所有情况下,该包都将 'users' 作为表名提取
此包为你提供了几个扩展点,以便你实现自己的逻辑。
查看这些接口
一旦实现,你可以像这样将自定义类传递给解析器
use Jhavenz\LaravelMigrationTableParser\Facades\MigrationTableParser; $result = MigrationTableParser::parse($file) ->setStrategies(MyCustomExtractionStrategy::class) ->setVisitors(MyCustomTableNameVisitor::class) ->parse(database_path('migrations/2021_01_01_000000_create_some_table.php'));
注意:当解析器运行时,这些实现由服务容器解析。
添加您自己的逻辑的另一种方法是将其添加到配置文件中
// Push, leaving the default strategies in place config()->push('migration-table-parser.strategies', [MyCustomExtractionStrategy::class]); // Override the default strategies config()->set('migration-table-parser.strategies', [MyCustomExtractionStrategy::class]);
安装
您可以通过 composer 安装此包
composer require jhavenz/laravel-migration-table-parser
发布
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="migration-table-parser-config"
这是发布配置文件的内容
<?php use Jhavenz\LaravelMigrationTableParser\ExtractMigrationTableVisitor; return [ 'visitors' => [ ExtractMigrationTableVisitor::class ], 'strategies' => [ Jhavenz\LaravelMigrationTableParser\ExtractionStrategies\Drop::class, Jhavenz\LaravelMigrationTableParser\ExtractionStrategies\DropIfExists::class, Jhavenz\LaravelMigrationTableParser\ExtractionStrategies\CreateOrAlterTableMethodIsCalled::class ] ];
高级用法
\Jhavenz\LaravelMigrationTableParser\ParserResult 提供了一些便利方法,帮助您处理从迁移文件中提取的每个结果。它基本的结构如下
readonly class ParserResult { public function __construct( private bool $successful, private string $message, private string $migrationFile, private array $tablesFound = [], private ?Throwable $error = null, ) {} // ... other methods }
除了上述属性的获取器之外,它还具有以下签名的方法
public function search(string $name): Optionpublic function table(int $index = 0): ?stringpublic function expect(): \Pest\Expectation
最后,解析器会发出您可以监听的事件。
它们的基本结构包括
readonly class ParsingStarted { public function __construct( public string $migrationFile, public Parser $parser ) {} }
和
readonly class ParsingCompleted { public function __construct( public ParserResult $result, public Parser $parser ) {} }
您可以使用 Laravel 的事件系统来监听这些事件,例如
use Jhavenz\LaravelMigrationTableParser\Events\ParsingStarted; Event::listen(ParsingStarted::class, function (ParsingStarted $event) { // do stuff... });
测试
Pest 用于测试,并且此存储库的初始提交包含约 30-40 个测试。
composer test
变更日志
请参阅 CHANGELOG 了解最近的变化。
贡献
欢迎贡献。
安全漏洞
如果您发现任何与安全相关的问题,请尽快 发邮件给我
许可证
麻省理工学院许可证(MIT)。请参阅许可证文件获取更多信息。