在laravel中更改列类型的最佳方法是什么?

时间:2019-04-16 07:23:39

标签: php laravel laravel-5

我有数据类型为balance的列double,但是我想更改它以适当的方式存储价格。我要设为decimal

为此,我正在尝试遵循

public function up()
{
    Schema::table('billing', function (Blueprint $table) {
        //
        $table->decimal('balance', 8, 2)->change();
    });
}

但是我对down函数感到困惑,是否应该还原它,我的意思是先前的数据类型?

有人可以帮我指导一下吗,我将非常感谢。谢谢

4 个答案:

答案 0 :(得分:4)

您无需为用于更改列的up函数定义drop函数。

因为drop()旨在删除表,并且可能会级联操作。 并且您的初始billing迁移文件应该已经具有删除该表的删除定义。

因此,您可以安全地将新迁移文件中的down()函数保留为空

答案 1 :(得分:2)

down方法的目的是将更改恢复到运行迁移的up方法之前完全相同的状态。如果要在up()中更改任何用户类型,则理想情况下应该在down()中将其反转。您的迁移将像这样结束:

   public function up()
    {
      //double to decimal
    }

  public function down()
    {
     //decimal to double
    }

答案 2 :(得分:1)

回滚迁移时使用

down()。假设您已经将新更改迁移到数据库,并且没有为down()写任何内容。在这种情况下,无论您进行回滚,都将使用decimal来更改新的列。如果您编写的代码再次将decimal还原为double,则在回滚时不会受到伤害。它将保持迁移之前的状态。

答案 3 :(得分:0)

我通常是这样想的。

如果此迁移阻止以前的迁移能够回滚,则需要使用.get()进行还原。

例如,如果我在两个现有表之间创建了新约束,那么如果不还原约束创建,则无法成功删除该约束。我需要还原它。

对于您而言,更改列的类型不会在某种程度上影响回滚。因此,您无需还原它。