Laravel 迁移表字段的类型变化

以下是我的文件 2015 _ 09 _ 14 _ 051851 _ create _ orders _ table. php。 并且我想将 $table->integer('category_id');更改为具有新迁移的字符串。

<?php


use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;


class CreateOrdersTable extends Migration {


/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('orders', function(Blueprint $table)
{
$table->increments('id');
$table->string('num');
$table->integer('user_id');


$table->text('store_name');
$table->integer('store_name_publication');


$table->string('postal_code', 255);
$table->string('phone_number', 255);


$table->text('title');
$table->text('description');


$table->string('list_image_filename1', 255);
$table->string('list_image_filename2', 255)->nullable();
$table->string('list_image_filename3', 255)->nullable();
$table->string('list_image_filename4', 255)->nullable();
$table->string('list_image_filename5', 255)->nullable();


$table->integer('term');


$table->datetime('state0_at')->nullable();
$table->datetime('state1_at')->nullable();
$table->datetime('state2_at')->nullable();
$table->datetime('state3_at')->nullable();
$table->datetime('state4_at')->nullable();
$table->datetime('state5_at')->nullable();
$table->datetime('state6_at')->nullable();
$table->datetime('state7_at')->nullable();
$table->datetime('state8_at')->nullable();
$table->datetime('state9_at')->nullable();
$table->datetime('state10_at')->nullable();


$table->integer('category_id');
$table->integer('target_customer_sex');
$table->integer('target_customer_age');


$table->integer('payment_order');
$table->integer('num_comment');
$table->integer('num_view');
$table->string('num_pop');


$table->integer('money');
$table->integer('point');


$table->datetime('closed_at');
$table->timestamps();
$table->softDeletes();
});
}


/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('orders');
}


}
141290 次浏览

更新: 2018年10月31日,仍然可以在幼虫5.7 https://laravel.com/docs/5.7/migrations#modifying-columns上使用

要对现有的 db 进行一些更改,可以在迁移中使用 change()修改列类型。

这就是你能做的

Schema::table('orders', function ($table) {
$table->string('category_id')->change();
});

请注意,您需要将 信条/原则依赖项添加到 comper.json 欲了解更多信息,请点击这里 < a href = “ http://laravel.com/docs/5.1/ 改動列”rel = “ norefrer”> http://laravel.com/docs/5.1/migrations#modifying-columns

标准溶液不为我工作,当改变类型从 短信长文

我不得不这样做:

public function up()
{
DB::statement('ALTER TABLE mytable MODIFY mycolumn  LONGTEXT;');
}


public function down()
{
DB::statement('ALTER TABLE mytable MODIFY mycolumn TEXT;');
}

这可能是一个原则问题。更多信息 给你

另一种方法是使用 string ()方法,并将值设置为文本类型 max length:

    Schema::table('mytable', function ($table) {
// Will set the type to LONGTEXT.
$table->string('mycolumn', 4294967295)->change();
});

对我来说,解决方案就是用 索引代替 没签名

这是完整的密码:

    Schema::create('champions_overview',function (Blueprint $table){
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('cid')->index();
$table->longText('name');
});




Schema::create('champions_stats',function (Blueprint $table){
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('championd_id')->index();
$table->foreign('championd_id', 'ch_id')->references('cid')->on('champions_overview');
});

2018年解决方案,还有其他答案是有效的,但 您不需要使用任何依赖项:

首先,您必须创建一个新的迁移:

php artisan make:migration change_appointment_time_column_type

然后在迁移文件 up()中,尝试:

    Schema::table('appointments', function ($table) {
$table->string('time')->change();
});

如果你没有改变字段大小,默认大小是 varchar(191),但是如果你想改变字段大小:

    Schema::table('appointments', function ($table) {
$table->string('time', 40)->change();
});

然后通过以下方式迁移文件:

php artisan migrate

更多来自 doc 的信息。

所有其他答案都是正确的 但是

php artisan migrate

请确保首先运行此代码

composer require doctrine/dbal

来避免这个错误

RuntimeException: 更改表“项”的列需要 DoctrineDBAL; install “教义/德巴尔”。

第一个作曲家需要 doctrine/dbal,然后:

$table->longText('column_name')->change();

不算是答案,只是一个关于 ->change()的注释:

只有以下列类型可以“更改”: bigInteger、二进制、 boolean、 date、 dateTime、 dateTimeTz、 decal、 Integral、 json、 longText、 mediumText、 smallInteger、 string、 text、 time、 unsignedBigInteger、 unsignedInteger 和 unsignedSmallInteger。

Https://laravel.com/docs/5.8/migrations#modifying-columns

如果您的列不是其中之一,您将需要删除该列或使用在其他答案中提到的 alter 语句。