2015-10-05 9 views
15

seguito è my my 2015_09_14_051851_create_orders_table.php. E voglio cambiare $ table-> integer ('category_id'); come una stringa con nuova migrazione.modifica del tipo di tabella della tabella di migrazione laravel

<?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'); 
    } 

} 
+0

$ tavola-> string ('category_id') ',' – aldrin27

+0

non voglio cambiare solo quel tipo con altri file di migrazione 2015_10_05_021049 _change_category_id_to_orders_table –

risposta

19

a fare qualche modifica al db esistente, è possibile modificare il tipo di colonna utilizzando change() in migrazione.

Questo è quello che si potrebbe fare

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

si prega di notare che è necessario aggiungere dottrina/dbal dipendenza composer.json per ulteriori informazioni si possono trovare qui http://laravel.com/docs/5.1/migrations#modifying-columns

+1

Ora sto usando laravel 4.2 –

14

Il standard solution didn Quando lavoro con me, cambia il tipo da TEXT a LONGTEXT.

ho dovuto in questo modo:

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

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

Questo potrebbe essere un problema di dottrina. Maggiori informazioni here.

Un altro modo per farlo è quello di utilizzare il metodo di stringa(), e impostare il valore alla lunghezza tipo di testo max:

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

Questo è particolarmente utile per le colonne DECIMAL. – dmmd

+1

Grazie amico, mi hai salvato la giornata) –

+1

Posso confermare questo comportamento. Per cambiare una colonna da testo a medio testo ho dovuto fare questo: $ table-> string ('messages', 16777215) -> nullable() -> change(); – Antonio

0

per me la soluzione è stata basta sostituire senza segno con l'indice

codice completo

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'); 
    });