Laravel 拉威尔提出了许多移民问题
10人开始与拉威尔新项目。 例如,2、3年后将有许多迁移Laravel 拉威尔提出了许多移民问题,laravel,migration,Laravel,Migration,10人开始与拉威尔新项目。 例如,2、3年后将有许多迁移 class CreateSnapshotTables extends Migration { /** * Run the migrations. * * @return void */ public function up() { // Create users table DB::statement(" CREATE
class CreateSnapshotTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// Create users table
DB::statement("
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`remember_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
);
");
// Create posts table
DB::statement("
CREATE TABLE `posts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
// ...etc.
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
);
");
}
}
如果新程序员加入团队,他将用代码和数据库设置开发环境
问题是,如果有很多迁移,那么如果有数千次迁移,那么运行速度就会太慢
class CreateSnapshotTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// Create users table
DB::statement("
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`remember_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
);
");
// Create posts table
DB::statement("
CREATE TABLE `posts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
// ...etc.
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
);
");
}
}
如何处理这个问题?是的,每次运行100次迁移都会让人头疼。您需要创建数据库表的快照,并将其作为第一次迁移 例如,假设您有一个带有
帖子
和用户
表的博客。对于每个表,您都需要一个CREATETABLE语句。如果您正在使用MySql为用户
表获取CREATETABLE语句,您将查询:
显示创建表用户
一旦有了CREATETABLE语句,就可以进行新迁移,运行这些查询并归档所有旧迁移
class CreateSnapshotTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// Create users table
DB::statement("
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`remember_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
);
");
// Create posts table
DB::statement("
CREATE TABLE `posts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
// ...etc.
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
);
");
}
}
使用生成新的迁移批。这对我来说真的很有用。我应该注意到有一些注意事项,但是你可以把它分叉,修改包以满足你的需要。谢谢,这是个好主意。它会起作用的。有一个限制是每次都应该手动进行迁移。有朝一日,可能会出现自动创建数据库迁移,扫描所有迁移并生成一个迁移,或者每次新迁移都会生成公共迁移,最后一个迁移。例如,如果我创建列username,然后将其更改为user,那么在通用迁移中,只有列“user”的“merged”更改。其中一个问题是不可逆的迁移,比如删除列。