我有一个名为projects_table
的迁移
Schema::create('projects', function(Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('user_id');
});
我需要添加一个名为project_settings
的新列。我以为我可以添加
$table->text('project_settings');
并运行php artisan migrate
,但我错了,没有用。然后我读了http://laravel.com/docs/5.0/schema#adding-columns并了解到我必须使用Schema::table(...);
所以我将现有的迁移(projects_table)更改为:
Schema::table('projects', function(Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('project_settings');
$table->integer('user_id');
});
但仍然没有奏效。我终于通过创建新的迁移ProjectsTableNewField
并简单地添加
Schema::table('projects', function(Blueprint $table) {
$table->text('project_settings');
});
我的问题是,这是在laravel中做到这一点的正确方法吗?添加列是一项非常基本的任务。如果我必须为每个数据库更改创建一个迁移,我认为迁移文件夹将会很快。这样做的正确方法是什么?
编辑:我还发现,为了迁移目的,有created_at
和updated_at
字段非常重要。我也会添加这些字段
答案 0 :(得分:2)
这是正常行为,但通常只有在您的应用程序已投入生产时才进行此类迁移,或者您的测试网站数据很重要并且您不想丢失它。
当您进行开发并且您拥有的数据并不重要时,您可以更改迁移,就像您在此处所做的那样:
Schema::table('projects', function(Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('project_settings');
$table->integer('user_id');
});
然后只需重新运行进行刷新的迁移:
php artisan migrate:refresh
这将重置所有迁移并再次运行。
此外,如果您使用播种机,您只需一个命令就可以运行所有迁移并为数据库设定种子:
php artisan migrate:refresh --seed
答案 1 :(得分:1)
是的,当您想要更新表的结构时创建新的迁移是正确的。
它允许你推动"在不影响现有数据库的情况下对实时服务器进行此修改。
他们的另一种方式,但如果你已经在表中存储了数据,它可能不适用:
php artisan migrate:reset
php artisan migrate
请记住,这将删除所有现有表格,最终导致数据丢失,以防您已存储数据。
答案 2 :(得分:1)
您应该拥有一个类似于以下内容的数据库迁移文件:
public function up()
{
Schema::create('table_name', function(Blueprint $table)
{
$table->increments('id');
//custom fields here
$table->timestamps();
});
}
public function down()
{
Schema::drop('table_name');
}
首先运行以下命令创建表:
php artisan migrate
更改所需的自定义字段后,请运行以下命令:
php artisan migrate:refresh
这将按照每次迁移的顺序运行down函数,然后使用自定义字段重新创建它们。这使您无需管理大量的迁移文件。但是,出于显而易见的原因,您永远不想在生产服务器上使用它。
在深入了解php编程之前仔细考虑一下你的数据建模,从组织的角度来看,你会感谢自己从长远来看,这样你就不必一遍又一遍地重做数据库。
请记住,如果您想要使用样本数据,则需要使用播种机。每次执行此操作时都会擦除表格。如果您正在创建一个新表并且没有修改以前的表,那么您可以只运行第一个命令。
要使用其他命令,请使用php artisan
命令查看可用的内容。
答案 3 :(得分:1)
非常简单,您可以向现有表添加新列
php artisan make:migration new_column_in_my_table --table=your_desired_table_to_modify
并在您的命令末尾仔细编写要修改的同一个表的名称,如:
--table=your_desired_table_to_modify
然后完全命令:
php artisan make:migration new_column_in_my_table table=your_desired_table_to_modify
然后新创建的迁移" new_column_in_my_table"将在你的情况下像:
Schema::table('projects', function(Blueprint $table) {
$table->text('project_settings')->after('name');
});
保存更改并运行命令
php artisan migrate