时间戳记SQL文件,以保持一致的Laravel迁移
#laravel #database #git #postgressql

背景

随着应用程序的扩展并变得更加复杂,经常引入函数,触发器和存储过程(例如功能,触发器和存储过程)。在Laravel中,可以通过编写SQL查询文件并通过迁移文件执行这些概念来实现这些概念。但是,随着应用程序的发展并添加了其他功能,会出现更新这些数据库功能的需求。如果修改后的声明是指尚未创建的新关系和列。

,这可能会导致迁移问题。

解决方案

要克服这一挑战,一种有效的方法是创建与使用它们的迁移文件相对应的时间戳SQL文件。通过将时间戳SQL文件与迁移文件相关联,开发人员可以确保数据库架构与应用程序代码之间的一致性。这些时间戳的SQL文件在使用时充当数据库函数的快照,确保对功能的修改不会破坏迁移过程。

本博客文章探讨了Laravel migration的时间戳SQL文件的好处和实施,重点是Laravel和PostgreSQL的应用程序堆栈


时间戳SQL文件的好处

通过将时间戳的SQL文件与迁移文件相关联,开发人员可以确保数据库架构与应用程序代码之间的一致性。以下是使用这种方法的一些关键好处:

无缝迁移执行:时间戳SQL文件允许在没有冲突的情况下执行迁移,即使对数据库函数进行了修改。这样可以防止错误并确保平稳的应用程序部署。

版本控制集成:时间戳SQL文件允许轻松跟踪对数据库函数的更改。通过遵循时间戳命名约定,识别和比较SQL文件的不同版本,增强版本控制实践变得简单。

团队协作:时间戳SQL文件通过提供清晰的修改历史来促进团队成员之间的协作。开发人员可以在不同的SQL文件和迁移上同时工作,降低冲突并提高生产率。


实施步骤

现在,让我们研究实现时间戳SQL文件所需的步骤。

步骤1:创建时间戳SQL文件

  • 为包括时间戳的SQL文件选择命名约定。命名SQL文件的正确方法是时间戳,操作,实体名称和类型。例如,YYYY_MM_DD_HHMMSS_extract_cleaned_company_name_function.sql

注意:在这里,我们使用了Laravel创建迁移文件时使用的时间戳格式。使用这种方式确保我们的文件在IDE的文件资源管理器中正确列出。

  • 将SQL文件存储在您的Laravel项目中的指定目录中,例如database/migrations/sql文件夹。

sql的示例上方文件2020_01_09_072809_create_extract_cleaned_company_name_function.sql

CREATE FUNCTION extract_cleaned_company_name(companyName varchar)
    RETURNS varchar AS
$$
DECLARE
    cleanedCompanyName varchar(255);
    replacePattern varchar(255);
BEGIN
    replacePattern:= '\s+|-';
    cleanedCompanyName := REGEXP_REPLACE(cleanedCompanyName, replacePattern, '', 'g');
    cleanedCompanyName := LOWER(cleanedCompanyName);

    RETURN cleanedCompanyName;
END
$$ LANGUAGE plpgsql;

步骤2:编写迁移文件

  • 在Laravel的迁移约定之后,使用koude3命令行工具创建一个迁移文件。
php artisan make:migration create_extract_cleaned_company_name_function
  • 在迁移文件的up()方法中,使用DB::unprepared()函数执行相应的时间戳SQL文件。
  • 例如: 2020_01_09_072809_create_extract_cleaned_company_name_function.php
public function up()
{
    $this->down();

    $sql = file_get_contents(database_path('migrations/sql/2020_01_09_072809_create_extract_cleaned_company_name_function.sql'));
    DB::unprepared($sql);
}

public function down()
{
    $sql = "DROP FUNCTION IF EXISTS extract_cleaned_company_name(varchar);";
    DB::unprepared($sql);
}

注意:我们调用down()方法,以避免创建一个在执行SQL查询以创建我们函数时已经存在的函数。

步骤3:修改数据库功能

  • 当数据库函数中需要更改时,请使用更新的功能声明创建一个新的时间戳SQL文件。
  • 确保新的SQL文件名遵循与新迁移文件相同的时间戳格式。

例如,

sql文件:2022_05_09_012450_create_extract_cleaned_company_name_function.sql

迁移文件:2022_05_09_012450_update_extract_cleaned_company_name_function.php

步骤4:运行迁移

  • 使用Laravel的迁移命令php artisan migrate执行迁移,包括时间戳SQL文件。

  • Laravel将处理SQL文件的执行,确保数据库架构和应用程序代码之间的一致性。


结论

时间戳SQL文件提供了一个可靠的解决方案,用于管理Laravel应用程序中高级数据库概念的更改。通过将SQL文件与迁移文件相关联并采用时间戳命名约定,开发人员可以无缝更新数据库功能而不会冒险冲突。

这种方法改善了版本控制实践,增强团队成员之间的协作,并确保平滑部署过程。利用Laravel和PostgreSQL的功能,您可以自信地扩展应用程序,同时保持一致且可靠的数据库模式。

记住,随着应用程序的发展,请定期更新您的时间戳SQL文件,并在Laravel项目中享受良好和灵活的数据库结构的好处。