Laravel 迁移将列类型从 varchar 更改为 longText
Laravel migrations change a column type from varchar to longText
我需要将 $table->string('text');
的迁移列类型更改为文本类型,我尝试了几种方法,但其中 none 行得通。是否可以在一次迁移中完成?我猜可以删除该列,然后使用新类型重新创建它,但我想知道是否可以在一次迁移中完成?
您可以创建一个新的迁移并且 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.
你可以这样做
Schema::table('yourTable', function (Blueprint $table) {
$table->text('text')->change();
});
be sure to add the doctrine/dbal dependency to your composer.json file
可以进行 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();
});
}
}
如果使用 change()
出现以下错误
Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL80Platform may not support it.
这意味着您的 table 中存在一些具有枚举类型的列(不一定更改)。因此,您可以使用以下函数代替 change()
:
public function changeColumnType($table, $column, $newColumnType) {
DB::statement("ALTER TABLE $table CHANGE $column $column $newColumnType");
}
然后像这样使用它:$this->changeColumnType('sometable','text','TEXT');
以下对我有用。
您肯定需要安装 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 数据类型。
我需要将 $table->string('text');
的迁移列类型更改为文本类型,我尝试了几种方法,但其中 none 行得通。是否可以在一次迁移中完成?我猜可以删除该列,然后使用新类型重新创建它,但我想知道是否可以在一次迁移中完成?
您可以创建一个新的迁移并且 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.
你可以这样做
Schema::table('yourTable', function (Blueprint $table) {
$table->text('text')->change();
});
be sure to add the doctrine/dbal dependency to your composer.json file
可以进行 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();
});
}
}
如果使用 change()
Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL80Platform may not support it.
这意味着您的 table 中存在一些具有枚举类型的列(不一定更改)。因此,您可以使用以下函数代替 change()
:
public function changeColumnType($table, $column, $newColumnType) {
DB::statement("ALTER TABLE $table CHANGE $column $column $newColumnType");
}
然后像这样使用它:$this->changeColumnType('sometable','text','TEXT');
以下对我有用。
您肯定需要安装 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 数据类型。