php - modificar - Cambio de tipo de campo de la tabla de migración de Laravel
modificar migraciones laravel (4)
La solución estándar no funcionó para mí, al cambiar el tipo de TEXTO a LONGTEXT .
Lo tuve así:
public function up()
{
DB::statement(''ALTER TABLE mytable MODIFY mycolumn LONGTEXT;'');
}
public function down()
{
DB::statement(''ALTER TABLE mytable MODIFY mycolumn TEXT;'');
}
Esto podría ser un problema de Doctrine. Más información here .
Otra forma de hacerlo es usar el método string () y establecer el valor en la longitud máxima del tipo de texto:
Schema::table(''mytable'', function ($table) {
// Will set the type to LONGTEXT.
$table->string(''mycolumn'', 4294967295)->change();
});
A continuación se encuentra mi archivo 2015_09_14_051851_create_orders_table.php . Y quiero cambiar $table->integer(''category_id'');
como una cadena con nueva migración.
<?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'');
}
}
Para mí la solución fue simplemente reemplazar sin firmar con índice.
Este es el código 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'');
});
Solución 2018, otras respuestas son válidas, pero no necesita usar ninguna dependencia :
Primero tienes que crear una nueva migración:
php artisan make:migration change_appointment_time_column_type
Luego en ese archivo de migración up()
, intente:
Schema::table(''appointments'', function ($table) {
$table->string(''time'')->change();
});
Si no cambia el tamaño, el valor por defecto será varchar(191)
pero si desea cambiar el tamaño del campo:
Schema::table(''appointments'', function ($table) {
$table->string(''time'', 40)->change();
});
Luego migre el archivo por:
php artisan migrate
actualización: 31 de octubre de 2018, todavía se puede utilizar en laravel 5.7 https://laravel.com/docs/5.7/migrations#modifying-columns
Para realizar algún cambio en la base de datos existente, puede modificar el tipo de columna utilizando change()
en la migración.
Esto es lo que podrías hacer
Schema::table(''orders'', function ($table) {
$table->string(''category_id'')->change();
});
tenga en cuenta que necesita agregar la dependencia de doctrine / dbal a composer.json para obtener más información, puede encontrarla aquí http://laravel.com/docs/5.1/migrations#modifying-columns