我需要将$table->string('text');的迁移列类型更改为文本类型,我尝试了几种方法,但都不起作用。是否可以在一次迁移中完成?我可以我猜删除列,然后用新类型重新创建它,但我想知道是否可以在一次迁移中完成?
$table->string('text');
xdnvmnnf1#
您可以创建一个新的迁移并仅更改一个列类型:
public function up(){ Schema::table('sometable', function (Blueprint $table) { $table->text('text')->change(); });}
public function up()
{
Schema::table('sometable', function (Blueprint $table) {
$table->text('text')->change();
});
}
字符串您需要安装doctrine/dbal才能使其工作
doctrine/dbal
composer require doctrine/dbal
型适用于Laravel 5.0+。不适用于Laravel 4.2。
lf5gs5x22#
这可以通过一个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(); }); }}
class AlterTableSomething extends Migration
/**
* Run the migrations.
*
* @return void
*/
Schema::table('table', function (Blueprint $table) {
$table->text('column_name')->change();
型
pnwntuvh3#
根据Laravel Doc你可以这样做
Schema::table('yourTable', function (Blueprint $table) { $table->text('text')->change();});
Schema::table('yourTable', function (Blueprint $table) {
字符串确保将doctrine/dbal依赖项添加到composer.json文件中
9vw9lbht4#
如果您在使用change()时出现以下错误请求未知的数据库类型枚举,Doctrine\DBAL\Platforms\MySQL80Platform可能不支持它。这意味着在你的表中存在一些列(不一定是被改变的),它具有枚举类型。所以你可以使用下面的函数来代替change():
change()
public function changeColumnType($table, $column, $newColumnType) { DB::statement("ALTER TABLE $table CHANGE $column $column $newColumnType");}
public function changeColumnType($table, $column, $newColumnType) {
DB::statement("ALTER TABLE $table CHANGE $column $column $newColumnType");
字符串像这样使用:$this->changeColumnType('sometable','text','TEXT');
$this->changeColumnType('sometable','text','TEXT');
hc8w905p5#
跟踪为我工作。当然,你需要安装doctrine/dbal才能使其工作,在终端中使用以下命令。
字符串然后按照此处所述创建迁移-https://laravel.com/docs/master/migrations#generating-migrations打开您的迁移文件并在下面写下。
Schema::table('yourTable', function (Blueprint $table) { $table->string('column_name','4294967295')->change();});
$table->string('column_name','4294967295')->change();
型由于longText最多有4,294,967,295个字符的限制,Laravel会自动将column_name改为longText数据类型。
6qfn3psc6#
要做到这一点,你需要doctrine/dbal,这是真的。“小心!”“小心!”“小心!”“小心!”“小心!”有个更安全的办法1.备份您的项目文件!1.看看你的composer.json文件来记录你的PHP版本。假设你有7.2.5。现在,搜索一个兼容的版本,在这个例子中是2.13.9。x1c 0d1x的数据1.如果您不想弄乱其他依赖项,请确保使用以下命令安装此软件包
COMPOSER_MEMORY_LIMIT=-1 composer require doctrine/dbal "^2.13.9"
字符串1.现在,我们准备做出改变!
php artisan make:migration change_xxx_type_in_yyy_table --table=yyy
// Let's assume we change an integer column's type to string/** * Run the migrations. * * @return void */public function up(){ Schema::table('yyy', function (Blueprint $table) { $table->string('xxx')->change(); });}/** * Reverse the migrations. * * @return void*/public function down(){ Schema::table('yyy', function (Blueprint $table) { $table->integer('xxx')->change(); });}
// Let's assume we change an integer column's type to string
Schema::table('yyy', function (Blueprint $table) {
$table->string('xxx')->change();
* Reverse the migrations.
public function down()
$table->integer('xxx')->change();
php artisan migrate
b4wnujal7#
之前建议的解决方案都很好,但令我惊讶的是,除了@Ahmet Firat Kele之外,没有人提到down()方法。当您运行php artisan migrate:rollback命令时,会执行此方法,并且在执行后,我们应该拥有在运行此迁移之前所做的更改。这是关键!
down()
php artisan migrate:rollback
return new class extends Migration{ public function up() { Schema::table('sandbox', function (Blueprint $table) { $table->text('column_name')->change(); }); } public function down() { Schema::table('sandbox', function (Blueprint $table) { $table->string('column_name')->change(); }); }};
return new class extends Migration
Schema::table('sandbox', function (Blueprint $table) {
$table->string('column_name')->change();
};
字符串
7条答案
按热度按时间xdnvmnnf1#
您可以创建一个新的迁移并仅更改一个列类型:
字符串
您需要安装
doctrine/dbal
才能使其工作型
适用于Laravel 5.0+。不适用于Laravel 4.2。
lf5gs5x22#
这可以通过一个TABLE迁移来实现。
正如在其他文章中提到的,确保从项目根运行
composer require doctrine/dbal
。这些机构的设置包括:
字符串
从你的项目根。
来自文档:
https://laravel.com/docs/master/migrations#modifying-columns
型
pnwntuvh3#
根据Laravel Doc
你可以这样做
字符串
确保将doctrine/dbal依赖项添加到composer.json文件中
9vw9lbht4#
如果您在使用
change()
时出现以下错误请求未知的数据库类型枚举,Doctrine\DBAL\Platforms\MySQL80Platform可能不支持它。
这意味着在你的表中存在一些列(不一定是被改变的),它具有枚举类型。所以你可以使用下面的函数来代替
change()
:字符串
像这样使用:
$this->changeColumnType('sometable','text','TEXT');
hc8w905p5#
跟踪为我工作。
当然,你需要安装doctrine/dbal才能使其工作,在终端中使用以下命令。
字符串
然后按照此处所述创建迁移-https://laravel.com/docs/master/migrations#generating-migrations
打开您的迁移文件并在下面写下。
型
由于longText最多有4,294,967,295个字符的限制,Laravel会自动将column_name改为longText数据类型。
6qfn3psc6#
要做到这一点,你需要doctrine/dbal,这是真的。
“小心!”“小心!”“小心!”“小心!”“小心!”
有个更安全的办法
1.备份您的项目文件!
1.看看你的composer.json文件来记录你的PHP版本。假设你有7.2.5。现在,搜索一个兼容的版本,在这个例子中是2.13.9。
x1c 0d1x的数据
1.如果您不想弄乱其他依赖项,请确保使用以下命令安装此软件包
字符串
1.现在,我们准备做出改变!
型
型
型
b4wnujal7#
之前建议的解决方案都很好,但令我惊讶的是,除了@Ahmet Firat Kele之外,没有人提到
down()
方法。当您运行php artisan migrate:rollback
命令时,会执行此方法,并且在执行后,我们应该拥有在运行此迁移之前所做的更改。这是关键!
字符串