SQL Y MIGRACIONES Shalini Ramchandani - Cristian Espinoza Verónica Calás - Omar Carrasco Desarrollo web: Fundamentos teóricos -Framework -Laravel -MVC ¿Qué es un framework? Entorno de trabajo. ➔ ➔ ➔ ➔ ➔ Módulos Conceptos Prácticas Criterios etc. Según búsquedas realizadas en google: Fuente: https://coderseye.com/best-php-frameworks-for-web-developers/ Según usos en proyectos: -Laravel: 3177 -Code igniter: 1085 -Symfony: 990 -Zend: 907 Fuente: https://coderseye.com/best-php-frameworks-for-web-developers/ Laravel como framework: ➔ ➔ ➔ ➔ ➔ ➔ Archivos y código organizados (unificados) MVC PHP 7 Documentación Package Mapeo objeto-relacional (ORM) Base de Datos -SQL -Migraciones ¿Qué es la arquitectura MVC? Modelo Controlador Vista ¿Qué es una base de datos? ➔ Relacionales y no relacionales. En relacionales: ➔ ➔ ➔ Información agrupada y estructurada. Se representan como tablas, compuestas por columnas y filas. Se ampara en modelos lógicos. ¿Cómo se modela una base de datos? Formas de crear una BD: ➔ Sybase PowerDesigner. ➔ Workbench (MYSQL Workbench) ➔ Scripts SQL ➔ Herramientas de Framework: ◆ Laravel -> Blueprint. ◆ RoR -> Active Records. Schema Migrations. CREATE - SQL 1. CREATE DATABASE databasename; 1. DROP DATABASE databasename; 1. 2. * Existe comando ALTER TABLE, depende de la versión. CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, .... ); DROP TABLE table_name; DATOS CONSTRAINT - SQL CREATE TABLE table_name ( column1 datatype constraint, column2 datatype constraint, column3 datatype constraint, .... ); ➔ ➔ ➔ ➔ ➔ NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY DEFAULT AUTOINCREMENT - SQL CREATE TABLE Persons ( ID int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, PRIMARY KEY (ID) ); SELECT - SQL 1. SELECT * FROM table_name; 1. SELECT DISTINCT column1, column2, … FROM table_name; WHERE- SQL 1. SELECT column1, column2, … SELECT * FROM Customers FROM table_name WHERE condition; WHERE CustomerID=1; CONSULTAS SQL 1. SELECT column1, column2, … FROM table_name WHERE condition1 AND condition2 AND condition3 ...; 2. SELECT column1, column2, … FROM table_name WHERE condition1 OR condition2 OR condition3 ...; 3. SELECT column1, column2, … FROM table_name WHERE NOT condition; INSERT - SQL INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); INSERT INTO table_name VALUES (value1, value2, value3, ...); INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country) VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway'); ¿Qué es una migración? ➔ Trasladarse desde el lugar en que se habita a otro diferente. Necesidad de uso de las migraciones: ➔ ➔ ➔ ➔ Actualización de una base de datos. Migración hacia o desde la plataforma de hardware. Migración a un nuevo software. Fusión de dos sistemas paralelos en uno solo que se requiere cuando una empresa absorbe a otra o cuando dos negocios se fusionan. Según la documentación de LARAVEL: ➔ Fácil control de versiones, bajo la modificación de los “schema”. https://laravel.com/docs/5.6/migrations CREAR - MIGRACIÓN php artisan make:migration create_users_table ➔ La migración es creada en el directorio: database/migration del proyecto. ➔ Cada migración contiene un TIMESTAMP. --create/--table php artisan make:migration create_users_table --create=users ➔ Se asigna un nombre específico. UBICACIÓN MIGRACIONES nombre_proyecto/database/migrations ¿Qué es un TIMESTAMP? ➔ Es el número de segundos que han transcurrido desde las 0 horas del 1 de enero de 1970. ➔ Conversor online: https://www.cdmon.com/es/conversor-timestamp Funciones que calculan el TIMESTAMP: PHP: $date = new DateTime($fecha); $timestamp = $date->getTimestamp(); JavaScript: down vot function timeConverter(UNIX_timestamp){ var a = new Date(UNIX_timestamp * 1000); var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul',...]; var year = a.getFullYear(); var month = months[a.getMonth()]; var date = a.getDate(); var hour = a.getHours(); var min = a.getMinutes(); var sec = a.getSeconds(); var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ; return time; } RECORDEMOS: ORIENTACIÓN A OBJETOS P.O.O. Abstracción Polimorfismo Herencia Encapsulamiento ESTRUCTURA - MIGRACIÓN ➔ Método up(): se usa para añadir nuevas tablas o columnas en la base de datos. ➔ Método down(): se usa como el inverso de la función anterior. EJEMPLO - ESTRUCTURA public function up() { Schema::create('flights', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } public function down() { Schema::drop('flights'); } <?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateFlightsTable extends Migration { public function up() { Schema::create('flights', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } public function down() { Schema::drop('flights'); } } EJECUTAR - MIGRACIÓN php artisan migrate php artisan migrate --force ➔ force, puede ocasionar la pérdida de datos. ROLLBACK - MIGRACIÓN ➔ Vuelve al último punto en memoria. php artisan migrate:rollback ➔ Se vuelve atrás al número dado de migraciones realizadas. php artisan migrate:rollback --step=5 ➔ (últimas 5 migraciones realizadas) Vuelve atrás a todas las migraciones realizadas. php artisan migrate:reset REFRESH - MIGRACIÓN php artisan migrate:refresh ➔ Realiza un rollback y posteriormente vuelve a ejecutar las migraciones. php artisan migrate:refresh --seed ➔ Lo anterior, pero poblando la BD. DATOS - MIGRACIÓN $table->increments('id'); $table->boolean('confirmed'); $table->char('name', 100); $table->integer('votes'); $table->year('birth_year'); ... MODIFICADORES - MIGRACIÓN $table->tipo(nombre)->característica(); Ejemplos: ->autoIncrement() ->nullable() ->change() ->after('column') ÍNDICES - MIGRACIÓN $table->primary('id'); $table->primary(['id', 'parent_id']); $table->unique('email'); $table->index('state'); $table->spatialIndex('location'); Tarea pa’ la Ksa ! Chao loh vimoh Vendizuone! Tarea: ● ● Realizar las migraciones de al menos dos entidades del MER presentado la semana pasada. Pueden presentar la actividad al final de esta clase, o al inicio de la clase de la próxima semana. php artisan make:migration create_users_table <?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class TablaHotel extends Migration { public function up() { Schema::create('hotels', function (Blueprint $table) { $table->increments('id'); $table->string('nombre'); $table->string('e-mail'); $table->timestamps(); }); } public function down() { Schema::drop('hotels'); } } php artisan migrate ¿DUDAS?