dweik/laravel-database-patching

1.0.0 2024-08-04 12:25 UTC

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

示例

以下是创建和使用补丁文件的示例

  1. 创建补丁文件
php artisan sql-patch:make UpdateUserDefaults
  1. 编辑补丁文件
// 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']);
        }
    }
}
  1. 运行补丁文件
php artisan sql-patch

最佳实践

  • 幂等性:确保所有 DML 操作都是幂等的,以避免脚本多次执行时出现的问题。
  • 测试:在生产部署之前,在测试环境中测试您的补丁。
  • 版本控制:将补丁文件放在版本控制下,以跟踪更改并有效协作。

结论

Laravel SQL-Patch 包简化了生产部署期间 DML 操作的管理,确保它们与迁移分开处理。这种方法最大限度地减少了错误并保持了干净、有序的代码库。

请根据您的特定包细节和需求进行进一步调整。