Está en la página 1de 4

Procedimientos Almacenados con Laravel

1. Se tiene la base de datos PCM con el siguiente modelo de base de datos

REGIONES
TIPODEOBRAS
IDREGION: INTEGER
IDTIPODEOBRA: INTEGER
REGION: VARCHAR(30)
TIPODEOBRA: VARCHAR(50)

OBRAS
IDOBRA: INTEGER
OBRA: VARCHAR(60)
IDTIPODEOBRA: INTEGER (FK)
IDREGION: INTEGER (FK)
MONTO: DECIMAL(8,2)

Se requiere implementar en la base de datos Procedimientos Almacenados


para mostrar dos consultas
a. Las Regiones y la Cantidad de Obras ejecutadas en cada una de ellas de
acuerdo al siguiente formato. Encabeza la lista la región con mayor
cantidad de obras
Obras por Región
Región Cantidad
PIURA 3
LIMA 3
AREQUIPA 2
LA LIBERTAD 1

b. La Región y el Monto ejecutado por todas las obras en la misma en el


siguiente formato
Monto por Región
LIMA 750000

2. Iniciar la consola de comandos para crear el proyecto procedimientos

C:\>composer create-project --prefer-dist laravel/laravel procedimientos

3. Crear el script de base de datos y grabarlo en la carpeta database con el


nombre de obras.sql
drop database if exists pcm;
create database pcm;
use pcm;
create table regiones(idregion int auto_increment,region varchar(30),primary
key(idregion));
Procedimientos Almacenados con Laravel

create table tipodeobras(idtipodeobra int auto_increment,tipodeobra


varchar(50),primary key(idtipodeobra));
create table obras(idobra int auto_increment,obra varchar(60),idtipodeobra
int,idregion int,monto decimal(8,2),primary key(idobra),foreign
key(idtipodeobra) references tipodeobras(idtipodeobra),foreign key(idregion)
references regiones(idregion));
insert regiones values(null,'LIMA');
insert regiones values(null,'PIURA');
insert regiones values(null,'LA LIBERTAD');
insert regiones values(null,'AREQUIPA');
insert tipodeobras values(null,'PUENTE');
insert tipodeobras values(null,'COLEGIO');
insert tipodeobras values(null,'CARRETERA');
insert obras values(null,'LIBERTADORES',1,1,100000);
insert obras values(null,'SIMON BOLIVAR',2,2,80000);
insert obras values(null,'CENTRAL',3,3,190000);
insert obras values(null,'CENTENARIO',2,2,100000);
insert obras values(null,'MIGUEL GRAU',2,4,30000);
insert obras values(null,'PANAMERICANA NORTE',3,1,500000);
insert obras values(null,'EMANCIPACION',2,2,100000);
insert obras values(null,'MATARANI II',1,4,50000);
insert obras values(null,'NOR ORIENTAL',3,1,150000);

create procedure obrasejecutadas()


select r.region,count(*) as cantidad from regiones as r inner join obras as o on
r.idregion=o.idregion group by r.region order by 2 desc;

create procedure montoxregion(in codigoregion int)


select r.idregion,r.region,sum(o.monto) as suma from regiones as r inner join
obras as o on r.idregion=o.idregion group by r.idregion having
r.idregion=codigoregion;

4. Creamos el controlador denominado Reportes

C:\ procedimientos>php artisan make:controller Reportes

5. Implementamos los métodos del controlador Reportes

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
class Reportes extends Controller
{
//
Procedimientos Almacenados con Laravel

public function principal()


{
$regiones=DB::table('regiones')->get();
return view('reportes.principal',compact('regiones'));
}

public function obrasxregion()


{
$obrasxregion=DB::select('call obrasejecutadas()');
return view('reportes.obrasxregion',compact('obrasxregion'));
}

public function montoxregion($region)


{
$montoxregion=DB::select('call montoxregion('.$region.')');
return view('reportes.montoxregion',compact('montoxregion'));
}
}

6. Crear la ruta que hará uso de los métodos del controlador Reportes.

Route::get('/','Reportes@principal');
Route::get('obrasxregion','Reportes@obrasxregion');
Route::get('montoxregion/{id}','Reportes@montoxregion');

7. Crear las Vistas para mostrar el primer reporte dentro de una nueva carpeta
dentro de \resources\views\reportes.

principal.blade.php

<h3>Pagina Principal</h3><br>
<a href="/obrasxregion">Cantidad de Obras por Region</a><br>
@foreach($regiones as $region)
{{$region->region}}
<a href="/montoxregion/{{{$region->idregion}}}">Ver Monto</a><br>
@endforeach

obrasxregion.blade.php

<h3>Obras x Region</h3>
<table>
<tr><td>Region</td>
<td>Cantidad</td></tr>
@foreach($obrasxregion as $obras)
<tr><td>{{$obras->region}}</td>
<td>{{$obras->cantidad}}</td></tr>
Procedimientos Almacenados con Laravel

@endforeach
</table>

montoxregion.blade.php

<h3>Monto x Region</h3>
@foreach($montoxregion as $datos)
{{$datos->region}}{{$datos->suma}}<br>
@endforeach

8. Establecer la conexión a la base de datos Ventas en el archivo env que se


encuentra dentro de la carpeta CRUD

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=pcm
DB_USERNAME=root
DB_PASSWORD=

9. Ejecutar el sitio

En ventana de comandos
> php artisan serve

En navegador
http://127.0.0.1:8000

También podría gustarte