2014-07-17 21 views
6

Ho avuto un problema con la migrazione di laravel in cui ho bisogno di impostare la lunghezza dell'indice per una colonna specifica ma sembra che lo schema/indice di Blueprint() non abbia tale caratteristica. Laravel DocsMigrazioni di Laravel 4 Schema - lunghezza dell'indice

 [Illuminate\Database\QueryException]           
     SQLSTATE[42000]: Syntax error or access violation: 
     1170 BLOB/TEXT column 'description' used in key specification 
     without a key length (SQL: alter table `Customers` 
     add index `description_idx`(`description`)) 

originale linea di query SQL:

KEY `description_idx` (`description`(100)) // index length = 100 
linea

laravel codice di migrazione:

$table->text('description')->nullable()->index('`description_idx`'); // no index length here 

Al momento mi sento il meglio che posso fare è di cambiare tipo di colonna, ma forse ci è il modo più appropriato per risolvere questo problema?

risposta

8

È possibile creare manualmente questi indici utilizzando DB :: statement(); nella tua migrazione.

Nella tua up() fare qualcosa di simile

DB::statement('CREATE INDEX description_idx ON Customers (description(100));'); 

E poi nel vostro verso il basso() si può semplicemente

Schema::table('Customers', function($table) { 
    $table->dropIndex('description_idx'); 
}); 

Speranza che aiuta.