我在Laravel项目中进行了迁移,它在数据库中创建了一个存储过程。当我第一次创建这个迁移时,它看起来很不错。
但是,如果我想改变现有的存储过程,我必须创建一个新的迁移,其中包含新版本的过程代码。
它可以工作,但它不允许让diff在git中清晰地显示出来。
下面是一个迁移示例:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
class GenerateReport extends Migration
{
public function up()
{
DB::statement(<<<SQL
CREATE OR REPLACE FUNCTION myfunc() RETURNS void AS
\$func\$
BEGIN
COPY (SELECT 1) TO '/tmp/myfile.tmp' BINARY;
END
\$func\$ LANGUAGE plpgsql;
SQL
);
}
public function down()
{
DB::statement("DROP FUNCTION myfunc()");
}
}我的问题是,是否有一种方法可以处理迁移,并且能够清楚地看到git中每一行迁移中的每一个变化。
diff工具来查看一些文件的变化。migration表中的行。但这是一次黑客攻击,我可能会忘记在生产中这样做。发布于 2016-05-19 06:48:12
基于此answer由@Denis。
为每次迁移创建一个带有SQL查询的文件,例如database/my_procedure.sql。
更改此文件后,创建如下新的极简式迁移:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
class GenerateReport extends Migration
{
public function up()
{
$filename = base_path() . '/database/database/my_procedure.sql';
DB::statement(file_get_contents($filename));
}
public function down()
{
}
}发布于 2016-05-18 23:55:31
我看到的最简单的解决方案是-为存储过程创建一个特定的迁移文件,文件名中没有任何日期,以避免混淆(例如。迁移/add_stored_PROCEDURRE.php)。
每当需要修改存储过程时--编辑现有文件,以便Git按照您的需要正确地显示修改。
强制此特定迁移在每次执行迁移时运行。有两种可能性:
https://stackoverflow.com/questions/37309541
复制相似问题