Laravel 5 ahora admite cambiar una columna; Aquí hay un ejemplo de la documentación oficial:
Schema::table('users', function($table)
{
$table->string('name', 50)->nullable()->change();
});
Fuente: http://laravel.com/docs/5.0/schema#changing-columns
Laravel 4 no admite la modificación de columnas, por lo que necesitará usar otra técnica, como escribir un comando SQL sin formato. Por ejemplo:
// getting Laravel App Instance
$app = app();
// getting laravel main version
$laravelVer = explode('.',$app::VERSION);
switch ($laravelVer[0]) {
// Laravel 4
case('4'):
DB::statement('ALTER TABLE `pro_categories_langs` MODIFY `name` VARCHAR(100) NULL;');
break;
// Laravel 5, or Laravel 6
default:
Schema::table('pro_categories_langs', function(Blueprint $t) {
$t->string('name', 100)->nullable()->change();
});
}
->nullable(false)
le permitirá volver a cambiar la columna.Aquí está la respuesta completa para el futuro lector. Tenga en cuenta que esto solo es posible en Laravel 5+.
En primer lugar, necesitará el paquete doctrine / dbal :
Ahora, en su migración, puede hacer esto para hacer que la columna sea anulable:
Quizás se pregunte cómo revertir esta operación. Lamentablemente, esta sintaxis no es compatible:
Esta es la sintaxis correcta para revertir la migración:
O, si lo prefiere, puede escribir una consulta sin procesar:
Espero que encuentre útil esta respuesta. :)
fuente
nullable(false)
me salvó de arrancarme el pelo, porquenullable()
no está bien documentado y no tiene ningunanotNull()
función.SET FOREIGN_KEY_CHECKS = 0
da un error. Es probable que deba modificar las restricciones de la tabla mediante una consulta sin formato. ver aquí: postgresql.org/docs/current/static/sql-altertable.htmlSupongo que está tratando de editar una columna en la que ya ha agregado datos, por lo que no es posible soltar la columna y agregarla nuevamente como una columna anulable sin perder datos. Vamos a
alter
la columna existente.Sin embargo, el generador de esquemas de Laravel no admite la modificación de columnas que no sean renombrar la columna. Por lo tanto, deberá ejecutar consultas sin procesar para hacerlas, como esta:
Y para asegurarnos de que aún pueda revertir su migración, también haremos lo
down()
mismo.Una nota es que, dado que está convirtiendo entre anulable y no anulable, deberá asegurarse de limpiar los datos antes / después de su migración. Así que hazlo en tu script de migración en ambos sentidos:
fuente
query
porstatement
down
función en el segundo bloque de código, la instrucción SQL debe terminar conNOT NULL
. (Ladown
función en el tercer ejemplo es correcta.)Él es la migración completa para Laravel 5 :
El punto es que puedes eliminarlo
nullable
pasandofalse
como argumento.fuente
Si sucede que cambia las columnas y tropezó con
entonces solo instale
composer require doctrine/dbal
fuente
Agregando a la respuesta de Dmitri Chebotarev, como para Laravel 5+.
Después de requerir el paquete de doctrina / dbal :
Luego puede hacer una migración con columnas anulables, así:
Para revertir la operación, haga:
fuente
Agregando a la respuesta Dmitri Chebotarev,
Si desea modificar varias columnas a la vez, puede hacerlo como a continuación
fuente
Intentalo:
fuente
->change
al final y por mencionarlo solo Laravel 5+composer require doctrine/dbal
Para Laravel 4.2, la respuesta de Unnawut anterior es la mejor. Pero si está usando el prefijo de tabla, entonces necesita alterar un poco su código.
Y para asegurarnos de que aún pueda revertir su migración, también haremos lo
down()
mismo.fuente