Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/migraciones»

De WikiEducator
Saltar a: navegación, buscar
(Poblando una base de datos desde migration)
Línea 6: Línea 6:
 
*Tiene una serie de ventajas, una vez que has creado las migraciones, otros las pueden ejecutar para tener exactamente tu estructura de bases de datos, y también puedes tener un control de versiones sobre tu base de datos
 
*Tiene una serie de ventajas, una vez que has creado las migraciones, otros las pueden ejecutar para tener exactamente tu estructura de bases de datos, y también puedes tener un control de versiones sobre tu base de datos
  
*Para crear una migración
+
*Para crear una migración especificamos el nombre
   php artisan make:migration usuarios
+
   php artisan make:migration usuarios  
*Para elecutar una migracion
+
*Podemos especificar el nombre de la tabla con '''''--table''''' o '''''--create'''''
 +
  php artisan make:migration usuarios --table=usuarios
 +
  o
 +
  php artisan make:migration usuarios --create=usuarios
 +
 
 +
*Para elecutar una migración
 
  php artisan migrate:install
 
  php artisan migrate:install
 
*Con esto tendríamos creada un migración.
 
*Con esto tendríamos creada un migración.
Línea 54: Línea 59:
 
}
 
}
 
</source>
 
</source>
 +
===Modificando la migración===
 +
*Podemos volver a alterar la estructura de la base de datos y volver a ejectuar la migración.
 +
{{MRM_Actividad|Title=Modificando migraciones|
 +
;Deshace la última migracion
 +
php artisan migrate:roollback
 +
;Deshace las 3 últimas migracion
 +
php artisan migrate:roollback --step=3
 +
;Deshace todo (ejecuta los métodos down
 +
php artisan migrate:reset
 +
;Deshace todo y vuelve a ejectuar las migraciones
 +
php artisan migrate:refresh
 +
;Deshace todo y vuelve a ejectuar las migraciones y ejecuta la población de datos
 +
php artisan migrate:refresh --seek
 +
;Borra todas las tablas de la base de datos y ejecuta las migraciones
 +
php artisan migrate:fresh
 +
 +
}}
 +
 
*Vemos como se crean los campos. Los tipos string, laravel los convierte a Varchar2.  
 
*Vemos como se crean los campos. Los tipos string, laravel los convierte a Varchar2.  
 
*id es de tipo autoincremento
 
*id es de tipo autoincremento
 
*timestamps, básicamente lo que hace ese método es crear dos campos llamados '''''created_at''''' y otro '''''updated_at'''''.
 
*timestamps, básicamente lo que hace ese método es crear dos campos llamados '''''created_at''''' y otro '''''updated_at'''''.
*Estos campos son de tipo TIMESTAMP. No sinformarán de cuando fue creado o modificado cada uno de los registros de nuestra tabla.
+
*Estos campos son de tipo TIMESTAMP. Nos informarán de cuando fue creado o modificado cada uno de los registros de nuestra tabla.
 
===Tipos de datos===
 
===Tipos de datos===
 
*A la hora de crear las tablas tenemos disponibles los tipos de datos que hay en sql
 
*A la hora de crear las tablas tenemos disponibles los tipos de datos que hay en sql
 
*Podemos verlos en la página de Laravel https://laravel.com/docs/5.6/migrations#migration-structure
 
*Podemos verlos en la página de Laravel https://laravel.com/docs/5.6/migrations#migration-structure
  
===La clase Schema ===
+
===La clase Schema (facade) ===
Esta clase proporcina métodos para toda el LDD del gestor de bases de datos
+
*Esta clase proporcina métodos para toda el LDD del gestor de bases de datos
;Crear las tablas con campos especificados
+
ttps://laravel.com/docs/5.6/migrations#creating-tables
 +
 
 +
;Crear las tablas con campos especificados (método '''''create''''')
 
<source lang=php>
 
<source lang=php>
 
   Schema::create('usuarios', function($tabla)  
 
   Schema::create('usuarios', function($tabla)  
Línea 127: Línea 152:
 
*Vamos a utilizarlo
 
*Vamos a utilizarlo
 
*Primero vamos a la carpeta '''''app/database/seeds'''''y creamos un fichero  '''''PoblarUsuariosSeeder.php'''''  
 
*Primero vamos a la carpeta '''''app/database/seeds'''''y creamos un fichero  '''''PoblarUsuariosSeeder.php'''''  
 +
* Tambien lo podemos hacer con artisan
 +
php artisan make:seeder PoblarAlumnos
 +
 
*Esta clase debe de extender de '''''Seeder'''''
 
*Esta clase debe de extender de '''''Seeder'''''
 
<source lang=php>
 
<source lang=php>
Línea 164: Línea 192:
 
*Ahora sólo nos queda ejecutar esta acción, esto lo haremos en la línea de comandos de artisan
 
*Ahora sólo nos queda ejecutar esta acción, esto lo haremos en la línea de comandos de artisan
 
  php artisan db:seed
 
  php artisan db:seed
 +
*Esta acción también la podemos hacer al ejecutar la migración
 +
php artisan migrate:refresh --seed
 
*Vamos a probar un componente que nos va a permitir realizar una población masiva de datos
 
*Vamos a probar un componente que nos va a permitir realizar una población masiva de datos
 
  https://github.com/fzaninotto/Faker
 
  https://github.com/fzaninotto/Faker
 
  https://packagist.org/packages/fzaninotto/faker
 
  https://packagist.org/packages/fzaninotto/faker
 
*Para instalar escribmos en el composer.json
 
*Para instalar escribmos en el composer.json

Revisión de 21:14 26 feb 2018



Migraciones

  • Es una forma de crear facilmente una base de datos para trabajar con laravel
  • Primero hemos de configurar la base de datos con la que queremos trabajar.
  • Hay que tener en cuenta que este sistema es como crear las tablas/campos con phpmyadmin u otro gestor
  • Tiene una serie de ventajas, una vez que has creado las migraciones, otros las pueden ejecutar para tener exactamente tu estructura de bases de datos, y también puedes tener un control de versiones sobre tu base de datos
  • Para crear una migración especificamos el nombre
 php artisan make:migration usuarios 
  • Podemos especificar el nombre de la tabla con --table o --create
 php artisan make:migration usuarios --table=usuarios
 o
 php artisan make:migration usuarios --create=usuarios
  • Para elecutar una migración
php artisan migrate:install
  • Con esto tendríamos creada un migración.
  • Ahora si vamos al phpmyadmin observamos que tenemos creada la tabla migrations con dos campos

PhpmyadminMigrations.png

  • Ahora tendremos que indicar la/s tabla/s que queremos crear
  • Para añadir los campos de la tabla tendremos que ir a la carpeta database/migrations/FECHA_CREACION_usuarios.php y lo abrimos
  • En el vemos que tenemos dos métodos uno up y otro down
  • Ahora tendríamos que ir a la clase tabla_producto y en el método up e indicar la estructura de tabla a crear.
<?php
 
use Illuminate\Database\Migrations\Migration;
 
class CrearTablaUsuario extends Migration {
 
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('usuarios', function($tabla) 
        {
            $tabla->increments('id');
            $tabla->string('nombre', 50);
            $tabla->string('email', 100)->unique();
            $tabla->string('password', 200);
            $tabla->timestamps();
        });
    }
 
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('usuarios');
    }
}

Modificando la migración

  • Podemos volver a alterar la estructura de la base de datos y volver a ejectuar la migración.


Icon activity.jpg
Modificando migraciones
{{{1}}}



  • Vemos como se crean los campos. Los tipos string, laravel los convierte a Varchar2.
  • id es de tipo autoincremento
  • timestamps, básicamente lo que hace ese método es crear dos campos llamados created_at y otro updated_at.
  • Estos campos son de tipo TIMESTAMP. Nos informarán de cuando fue creado o modificado cada uno de los registros de nuestra tabla.

Tipos de datos

La clase Schema (facade)

  • Esta clase proporcina métodos para toda el LDD del gestor de bases de datos
ttps://laravel.com/docs/5.6/migrations#creating-tables
Crear las tablas con campos especificados (método create)
  Schema::create('usuarios', function($tabla) 
        {
         $tabla->increments('id'); //Campo autoincrementto
         $tabla->string('nombre', 50); //String
         $tabla->string('email', 100)->unique();
         $tabla->string('password', 200);
         $tabla->string('direccion', 200);
         $tabla->timestamps(); //Crea los campos update_up y current_up de tipo '''''timestamp'''''
        });
  • Para ver los métodos para especificar los tipos campos de la base de datos consultar a la web de referencia.
Borrar la tabla, método drop
  Schema::drop('nombreTabla');
  Schema::dropIfExists('users');
Cambiar el nombre de una tabla, método rename
  Schema::rename('nombreAntiguo','nombreNuevo);
Cambiar el nombre de un campo de una tabla, método rename
  Schema::rename('nombreAntiguo','nombreNuevo);


Añadir un campo en la tabla método table
Schema::table('nombreTabla', function($table)
{
    $table->string('email');
});
Añadir restricciones
  • 1.- clave primaria
$table->primary('id'); //Clave principal id
$table->primary(array('first', 'last'));//Clave principal compuesta
  • 1.- clave candidata o valor único
$table->unique('email');
  • 1.- índice
  $table->index('cod¡go'); 	Agregar un índice básico

=

Poblando una base de datos desde migration

  • Laravel provee una sencilla manera de poblar una base de datos
  • Esta acción se conoce como seeding
  • En una forma de gestionar todo desde el framework, no obstante igualmente se puede hacer directamente desde el phpmyadmin.
  • Vamos a utilizarlo
  • Primero vamos a la carpeta app/database/seedsy creamos un fichero PoblarUsuariosSeeder.php
  • Tambien lo podemos hacer con artisan
php artisan make:seeder PoblarAlumnos
  • Esta clase debe de extender de Seeder
class PoblarUsuariosSeeders extends Seeder {
    //put your code here
     public function run()
    { //Usando el modelo creamos un nuevo registro. Tambien se puede hacer con el método save
       Usuario::create(array(
            'usuario'  => 'manolo',
            'email'     => 'admin@admin.com',
            'password' => Hash::make('manolo') // Hash::make() nos va generar una cadena con nuestra contraseña encriptada
    }
}
  • Ahora nos queda ejecutarla; Para ello vamos a modificar la clase DataBaseSeeders.php que tenemos en /app/database/seeds.
  • Ahí lo que hacemos es añadir una linea para que se llame a la clase que previamente hemos creado
  $this->call('PoblarUsuariosSeeders');
  • Quedándonos el código de la clase
class DatabaseSeeder extends Seeder {
	/**
	 * Run the database seeds.
	 *
	 * @return void
	 */
	public function run()
	{
		Eloquent::unguard();
                $this->call('PoblarUsuariosSeeders');
		// $this->call('UserTableSeeder');
	}
}
  • Ahora sólo nos queda ejecutar esta acción, esto lo haremos en la línea de comandos de artisan
php artisan db:seed
  • Esta acción también la podemos hacer al ejecutar la migración
php artisan migrate:refresh --seed
  • Vamos a probar un componente que nos va a permitir realizar una población masiva de datos
https://github.com/fzaninotto/Faker
https://packagist.org/packages/fzaninotto/faker
  • Para instalar escribmos en el composer.json