我们有一个现有的复杂数据库模式,包括索引,约束,触发器,表等。
使用liquibase,您可以指向更改集中的纯sql文件,这可能是第一个(初始模式创建)迁移的整个数据库的转储。
有没有办法用laravel工匠迁移系统做到这一点?
我们希望使用SQL语言进行所有数据库更新(因为我们已经知道了,因为我们只会使用mysql),但是需要框架(migrate或liquibase)以正确的顺序应用更改等(所以他们记录已经应用的更改的数据库等)。
如果没有,有没有人用liqubase和laravel?唯一的问题是它无法读取.env数据库连接字符串,并且每个开发人员都需要安装liqubase(不是世界末日,但如果系统中内置的laravel可以使用sql,它将节省我们时间和精力)
答案 0 :(得分:1)
您不仅限于可以在迁移中运行的代码。 Run raw SQL queries使用数据库外观。此示例显示了在同一迁移中使用的两种方法。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<video id="video" data-setup-lazy="{"language": "en", "fluid": true}" class="video-js" preload="auto" controls="true" title="Export Compliance">
<source src="http://localhost/pluginfile.php/myvideo.mp4" type="video/mp4">
<a class="mediafallbacklink" href="http://localhost/pluginfile.php/myvideo.mp4">Video Source</a>
</video>
答案 1 :(得分:1)
我相信在某些情况下使用原始/普通SQL迁移有很多好处
尽管有一种方法可以在Laravel迁移中执行原始SQL,但是即使使用heredoc
也可以在变量中编写和管理原始SQL代码是痛苦且不自然的。
完全免责声明:这是一个无耻的插件
最近,我创建了一个实验包laravel-sql-migrations,用于我的项目中,以提取原始SQL执行的详细信息,并允许像在Liquibase或Windows XP中一样在*.sql
文件中编写和保留SQL迁移。飞路。
该程序包还扩展了make:migration
和make:model
命令,以便您可以使用熟悉的工作流程
php artisan make:migration create_users_table --sql
或
php artisan make:model User --migration --sql
这将产生三个文件
database └── migrations ├── 2018_06_15_000000_create_users_table.down.sql ├── 2018_06_15_000000_create_users_table.php └── 2018_06_15_000000_create_users_table.up.sql
在这一点上,您可以忘记2018_06_15_000000_create_users_table.php
,除非您想要配置或覆盖此特定迁移的行为(即,如果数据库支持DDL,例如PostgreSQL,则设置特定的连接和/或使用事务)
如果您不使用反向/向下迁移,则可以删除相应的*.down.sql
文件。
如果您要使用PostgreSQL,则这是标准Laravel users
表的迁移的样子
-- 2018_06_15_000000_create_users_table.up.sql
CREATE TABLE IF NOT EXISTS users (
id BIGSERIAL PRIMARY KEY,
name CITEXT,
email CITEXT,
password TEXT,
remember_token TEXT,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE UNIQUE INDEX IF NOT EXISTS users_email_idx ON users (email);
-- 2018_06_15_000000_create_users_table.down.sql
DROP TABLE IF EXISTS users;