Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/migraciones»
De WikiEducator
(→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 | + | *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. | + | *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 22: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
- 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.
- 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
- 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
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