我对Laravel中迁移的实际使用感到困惑;请帮我澄清一下。
假设我已经使用create_blabla_table.php迁移设置了所有表格,现在我决定公司表格不仅需要名称而且还需要一个slug列。
SO。我去create_companies_table.php并编辑它:我添加字符串字段slug。
这种变化是如何通过的?我现在需要重置整个数据库并重新播种所有表吗?或者我可以更新这个表吗?
或者我应该创建一个新的迁移文件,如add_company_slug_field.php。但是后来我将有很多迁移文件,我可能会忘记它。
答案 0 :(得分:1)
您需要做的是生成一个新的迁移,以您希望的方式修改表格,然后运行 php artisan migrate
答案 1 :(得分:1)
如果您在迁移中更改了列,则应遵循两个步骤
当您运行命令php artisan migrate:rollback
时,将回滚整个迁移,当您运行php artisan migrate
时,所有迁移都将在默认情况下迁移,您应该运行种子。
如果您具有没有外键约束的独立表,则可以通过在迁移表中递增表批次来执行单表迁移。更改批号后,只需使用artisan命令回滚和迁移表。
对于具有外键的表,应该在子节点之前创建父节点,因为迁移中的顺序错误可能会发生错误。
您可以通过递增批量值来对表组进行回滚/迁移操作。
通过这种方式,您可以更改特定的表格。
答案 2 :(得分:1)
实际上有两种方式..首先是
php artisan migrate:rollback
然后在重新运行之前更新您的迁移文件..
php artisan migrate
但这会清除已保存在数据库中的所有记录..
如果您不想要另一种方法是使用
创建新的迁移更新栏目属性
Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->nullable()->change();
});
重新开始一个栏目
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});
删除栏目
Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['votes', 'avatar', 'location']);
});
NEW COLUMN
Schema::table('users', function (Blueprint $table) {
$table->string('email');
});
然后有一个快捷方式,但 不是一个好习惯 ..更新您的迁移文件..然后手动更新数据库..