【问题标题】:Laravel migrations change a column type from varchar to longTextLaravel 迁移将列类型从 varchar 更改为 longText
【发布时间】:2016-10-09 23:59:33
【问题描述】:

我需要将迁移列类型$table->string('text'); 更改为文本类型,我尝试了几种方法,但都没有奏效。是否可以在一次迁移中完成?我可以猜测删除该列,然后使用新类型再次创建它,但我想知道是否可以在一次迁移中做到这一点?

【问题讨论】:

  • 除了下面的答案之外,即使您只更改其类型,您也必须删除该列。

标签: laravel laravel-migrations


【解决方案1】:

可以进行 TABLE 迁移。

如其他帖子中所述,请务必从您的项目根目录运行 composer require doctrine/dbal

这些设置:

php artisan make:migration alter_table_[yourtablenamehere]_change_[somecolumnname] --table=[yourtablenamehere]

来自您的项目根目录。

来自文档:

https://laravel.com/docs/master/migrations#modifying-columns

class AlterTableSomething extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('table', function (Blueprint $table) {
            $table->text('column_name')->change();
        });
    }
}

【讨论】:

    【解决方案2】:

    以下对我有用。

    你肯定需要安装 doctrine/dbal 来完成这项工作,在终端中使用以下命令。

    composer require doctrine/dbal
    

    然后按照此处所述创建迁移-https://laravel.com/docs/master/migrations#generating-migrations

    打开您的迁移文件并在下面写下。

    Schema::table('yourTable', function (Blueprint $table) {
        $table->string('column_name','4294967295')->change();
    });
    

    由于 longText 最多有 4,294,967,295 个字符的限制,Laravel 会自动将 column_name 更改为 longText 数据类型。

    【讨论】:

      【解决方案3】:

      您可以创建一个新的迁移和change just one column type

      public function up()
      {
          Schema::table('sometable', function (Blueprint $table) {
              $table->text('text')->change();
          });
      }
      

      您需要安装doctrine/dbal 才能完成这项工作

      composer require doctrine/dbal
      

      适用于 Laravel 5.0+。它不适用于 Laravel 4.2。

      【讨论】:

      • 您还需要删除该字段吗?因为在使用您的代码更改列时,我仍然收到“列已存在:1060 列名重复”。
      • @NewbieLearner 此功能自 Laravel 5.0 起可用。如果你使用的是 Laravel 4.2,这将不起作用。
      【解决方案4】:

      如果您使用change() 得到以下错误

      请求的未知数据库类型枚举,Doctrine\DBAL\Platforms\MySQL80Platform 可能不支持。

      这意味着在您的表中存在一些具有枚举类型的列(不一定要更改一个)。所以使用change() 你可以使用以下函数:

      public function changeColumnType($table, $column, $newColumnType) {                
          DB::statement("ALTER TABLE $table CHANGE $column $column $newColumnType");
      } 
      

      然后像这样使用它:$this->changeColumnType('sometable','text','TEXT');

      【讨论】:

      • tytyty 例如如何做蓝图:)
      【解决方案5】:

      根据Laravel Doc

      你可以这样做

      Schema::table('yourTable', function (Blueprint $table) {
          $table->text('text')->change();
      });
      

      请务必在您的 composer.json 文件中添加学说/dbal 依赖项

      【讨论】:

        猜你喜欢
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-09
        • 2011-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多