Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel migration table field's type change

Following is my file 2015_09_14_051851_create_orders_table.php. And I want to change $table->integer('category_id'); as a string with new migration.

<?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');     }  } 
like image 410
naing linhtut Avatar asked Oct 05 '15 02:10

naing linhtut


People also ask

How do I rename a table column in Laravel migration?

To rename a column, you may use the renameColumn method on the Schema builder. Before renaming a column, be sure to add the doctrine/dbal dependency to your composer. json file: Schema::table('users', function (Blueprint $table) { $table->renameColumn('from', 'to'); });

Can I rename migration in Laravel?

Yes, you can name them however you want, but they will run in alphabetical order (which is why laravel timestamps them). Also you can change a migrations name after the fact (you've already run the migration).


2 Answers

update: 31 Oct 2018, Still usable on laravel 5.7 https://laravel.com/docs/5.7/migrations#modifying-columns

To make some change to existing db, you can modify column type by using change() in migration.

This is what you could do

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

please note you need to add doctrine/dbal dependency to composer.json for more information you can find it here http://laravel.com/docs/5.1/migrations#modifying-columns

like image 131
mininoz Avatar answered Sep 22 '22 02:09

mininoz


The standard solution didn't work for me, when changing the type from TEXT to LONGTEXT.

I had to it like this:

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

This could be a Doctrine issue. More information here.

Another way to do it is to use the string() method, and set the value to the text type max length:

    Schema::table('mytable', function ($table) {         // Will set the type to LONGTEXT.         $table->string('mycolumn', 4294967295)->change();     }); 
like image 39
Francisco Corrales Morales Avatar answered Sep 26 '22 02:09

Francisco Corrales Morales