【发布时间】:2016-10-09 23:59:33
【问题描述】:
我需要将迁移列类型$table->string('text'); 更改为文本类型,我尝试了几种方法,但都没有奏效。是否可以在一次迁移中完成?我可以猜测删除该列,然后使用新类型再次创建它,但我想知道是否可以在一次迁移中做到这一点?
【问题讨论】:
-
除了下面的答案之外,即使您只更改其类型,您也必须删除该列。
标签: laravel laravel-migrations
我需要将迁移列类型$table->string('text'); 更改为文本类型,我尝试了几种方法,但都没有奏效。是否可以在一次迁移中完成?我可以猜测删除该列,然后使用新类型再次创建它,但我想知道是否可以在一次迁移中做到这一点?
【问题讨论】:
标签: laravel laravel-migrations
可以进行 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();
});
}
}
【讨论】:
以下对我有用。
你肯定需要安装 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 数据类型。
【讨论】:
您可以创建一个新的迁移和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。
【讨论】:
如果您使用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');
【讨论】:
你可以这样做
Schema::table('yourTable', function (Blueprint $table) {
$table->text('text')->change();
});
请务必在您的 composer.json 文件中添加学说/dbal 依赖项
【讨论】: