Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Error en migración en Laravel

Estas en el tema de Error en migración en Laravel en el foro de PHP en Foros del Web. Hola a todos, estoy aprendiendo a trabajar con Laravel y al crear una base de datos casi siempre me genera error. Código PHP:      public function  ...
  #1 (permalink)  
Antiguo 21/04/2018, 17:37
 
Fecha de Ingreso: julio-2008
Mensajes: 258
Antigüedad: 15 años, 9 meses
Puntos: 9
Información Error en migración en Laravel

Hola a todos, estoy aprendiendo a trabajar con Laravel y al crear una base de datos casi siempre me genera error.

Código PHP:
    public function up()
    {
        
Schema::create('user', function (Blueprint $table) {

// Auto-incrementing UNSIGNED INTEGER (primary key) equivalent column.
            
$table->increments('id_user')->unique();

            
$table->enum('level', ['E''A'])
                    ->
default('E');

            
$table->string('email')
                    ->
unique();

            
$table->string('password');

            
$table->char('user_name'100)
                    ->
unique();

            
$table->char('user_address'100)
                    ->
unique();

            
$table->timestamps('added_on');
            
$table->rememberToken();
        });
    } 
Estoy siguiendo la documentación de la página oficial y no encuentro en qué puede fallar.

Un saludo!!
__________________
"La diversidad de opiniones crean una perspectiva capaz de ver todas las caras del objeto"

Última edición por winjose; 21/04/2018 a las 17:53
  #2 (permalink)  
Antiguo 21/04/2018, 18:57
 
Fecha de Ingreso: julio-2008
Mensajes: 258
Antigüedad: 15 años, 9 meses
Puntos: 9
Respuesta: Error en migración en Laravel

Ya he podido solucionarlo. Ha sido un despiste. Los manuales hay que leerlos al dedillo jejeje.

Dejo por aquí los errores que he cometido por si alguien más se encuentra aprendiendo lo mismo que prevea posibles errores.

1.- El tipo de columnas: timestamp() no se puede usar para almacenar una marca de tiempo. Para ello debemos poner dateTime().

2.- Mucho cuidado con increments(). Al declarar ese tipo, automáticamente declaramos tipo auto-incrementable + llave primaria.

3.- Cuidado con: $table->string('email')->unique(); Os dará error si no definís la longitud.

Código PHP:
 public function up()
    {
        
Schema::create('user', function (Blueprint $table) {

// Auto-incrementing UNSIGNED INTEGER (primary key) equivalent column.
            
$table->increments('id_user')->unique();

            
$table->enum('level', ['E''A'])
                    ->
default('E');

            
$table->string('email'90)
                    ->
unique();

            
$table->string('password'90);

            
$table->char('user_name'100)
                    ->
unique();

            
$table->char('user_address'100)
                    ->
unique();

            
$table->dateTime('added_on');
            
$table->timestamps();

            
$table->rememberToken();
        });
    } 
__________________
"La diversidad de opiniones crean una perspectiva capaz de ver todas las caras del objeto"

Última edición por winjose; 21/04/2018 a las 19:02
  #3 (permalink)  
Antiguo 21/04/2018, 21:29
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Error en migración en Laravel

Yo le quitaría el unique()

Código PHP:
Ver original
  1. $table->increments('id_user')->unique();
  #4 (permalink)  
Antiguo 21/04/2018, 21:39
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Error en migración en Laravel

Cita:
1.- El tipo de columnas: timestamp() no se puede usar para almacenar una marca de tiempo. Para ello debemos poner dateTime().
De hecho si es posible usar el tipo timestamp revisar https://github.com/laravel/framework...print.php#L904
Posiblemente intentaste usar timestamps que agrega los campos created_at y updated_at
Cita:
$table->increments('id_user')->unique();
No requieres el unique() ya que los incrementables por definición no se repiten
Cita:
3.- Cuidado con: $table->string('email')->unique(); Os dará error si no definís la longitud.
Esto no es correcto, cuando no indicas una longitud la migración establece una longitud de 255; revisa el método string la longitud por default se establece mediante el atributo estático Builder::$defaultStringLength

No solo se requiere leer el manual, también date un tiempo para leer el código.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: laravel, migración
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:16.