我需要将迁移列类型更改$table->string('text');
为文本类型,我尝试以几种方式做到这一点,但都没有奏效。是否可以在一次迁移中完成?我可以猜测删除该列,然后使用新类型再次创建它,但我想知道是否可以在一次迁移中做到这一点?
5 回答
您可以创建一个新的迁移并仅更改一种列类型:
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。
可以使用 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();
});
}
}
你可以这样做
Schema::table('yourTable', function (Blueprint $table) {
$table->text('text')->change();
});
确保将教义/dbal 依赖项添加到您的 composer.json 文件中
如果您使用以下错误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');
以下为我工作。
当然,您需要在终端中使用以下命令安装教义/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 数据类型。