dweik / laravel-database-patching
Laravel 数据库补丁
1.0.0
2024-08-04 12:25 UTC
Requires
- php: ^7.3|^8.0
- illuminate/database: ^8.0
This package is auto-updated.
Last update: 2024-09-04 12:46:22 UTC
README
管理 DML(数据操作语言)语句在代码部署期间可能具有挑战性,尤其是在为 DDL(数据定义语言)操作设计的数据库迁移中。此包提供了一个解决方案来单独处理 DML 操作,确保部署顺畅且无错误。
为什么使用 Laravel SQL-Patch?
将 DML 语句合并到迁移中可能导致
- 重新运行错误:如果数据已存在或条件未满足,则重新运行新环境中的迁移时,DML 语句可能会失败。
- 关注点分离:将模式更改(DDL)和数据更改(DML)分离可以提高代码库的清晰性和可维护性。
功能
- 无缝 DML 管理:轻松创建和管理 DML 补丁,而不会干扰迁移文件。
- 幂等补丁:确保 DML 操作可以安全地多次执行。
- 结构化部署:在模式更改和数据更改之间保持清晰的分离。
安装
使用 Composer 安装此包
composer require dweik/laravel-database-patching
创建新的补丁文件
要创建新的补丁文件,请使用以下 Artisan 命令。补丁文件将位于 in database/patches/...
php artisan sql-patch:make SomeClassName
在生成的补丁文件中的 handler 方法下添加您的 DML 代码。
运行补丁文件
要运行新的补丁文件,请使用以下命令
php artisan sql-patch
示例
以下是创建和使用补丁文件的示例
- 创建补丁文件
php artisan sql-patch:make UpdateUserDefaults
- 编辑补丁文件
// database/patches/2024_08_04_104717_UpdateUserDefaults.php use LaravelDatabasePatching\Interfaces\SQLPatchInterface; use \Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\DB; class UpdateUserDefaults implements SQLPatchInterface { public function handler() { // Ensure the column exists before updating if (Schema::hasColumn('users', 'default_column')) { DB::table('users')->whereNull('default_column')->update(['default_column' => 'default_value']); } } }
- 运行补丁文件
php artisan sql-patch
最佳实践
- 幂等性:确保所有 DML 操作都是幂等的,以避免脚本多次执行时出现的问题。
- 测试:在生产部署之前,在测试环境中测试您的补丁。
- 版本控制:将补丁文件放在版本控制下,以跟踪更改并有效协作。
结论
Laravel SQL-Patch 包简化了生产部署期间 DML 操作的管理,确保它们与迁移分开处理。这种方法最大限度地减少了错误并保持了干净、有序的代码库。
请根据您的特定包细节和需求进行进一步调整。