You are on page 1of 2

Hola hace poco tuve muchos problemas para encontrar respuestas de procedimientos almacenados

con LARAVEL. As que decid hacer un tutorial.


///ESTE ES UN PROCEDIMIENTO ALMACENADO QUE SIMPLEMENTE HACE UN SELECT A MI TABLE
"DEPARTAMENTO"
//Por cierto, este DEFINER: toma mi usuario del servidor root :) si tu usuario es otro y quieres utilizar
mi procedimiento te saldr error.
CREATE DEFINER=`root`@`localhost` PROCEDURE `USP_MUESTRA_DEPARTAMENTO`()
BEGIN
SELECT Codigo_Departamento,Departamento from departamento
order by Codigo_Departamento;
END
Sigamos: Ahora en mi proyecto de LARAVEL se ve asi...

Un poco inusual cierto, te explico lo que hice, "Refactorice" mi aplicacin, y cree una nueva carpeta
llamada "PROCEDURES" donde guardare los "CALLS PROCEDURE"
Esto es lo que contiene DepartamentoProcedure.php
<?php
//Especifico la ruta donde se encuentra este archivo
namespace BechBank\Procedures;
//Nombre de la clase
class DepartamentoProcedure {
//Metodo que llamar a mi procedimiento
public function getDepartamento()
{
return \DB::select('CALL USP_MUESTRA_DEPARTAMENTO');
}
}

Listo asi de simple, un select('CALL NOMBRE_DEL_PROCEDIMIENTO'), nada mas simple


cierto? Ahora solo me falta llamar a este Metodo desde mi controller.
<?php
//LLAMANDO A MI DEPARTAMENTOPROCEDURE
use BechBank\Procedures\DepartamentoProcedure;
class PrestamosController extends BaseController {
//Lo almacenar en una propiedad heredable.
protected $DepartamentoProcedure;
//En mi mtodo mgico, lo pasar para poder utilizarlo cuando desee dentro de mi clase.
public function __construct(DepartamentoProcedure $DepartamentoProcedure)
{
$this->DepartamentoProcedure = $DepartamentoProcedure;
}
//Con cualquier metodo que tu crees solo tendrias que llamarlo de la siguiente maner
public function Consumo()
{
//Almaceno el resultado en una variable $departamentos, llamo a mi propiedad y le pido el
mtodo que llamaba al procedimiento almacenado.
$departamentos = $this->DepartamentoProcedure->getDepartamento();
/*Se lo mando finalmente a una vista, con la variable :) esta se volvi en un arreglo asociativo,
as que solo tendras que llamar a los campos desde tu vista algo as {{$departamentos[0]>Codigo_Departamento}} o hacerle un foreach */
return View::make('web.prestamos.prestamos_consumo', compact('departamentos'));
//Si quieres ver lo que devuelve. dd($departamentos);
}
Y si mi procedimiento recibe parmetros como se los mando y como los recibo ?..
//PROCEDIMIENTO
namespace BechBank\Procedures;
class CalculoCuotaProcedure {
public function getCuota($v_CODIGO_MONEDA, $v_CODIGO_SUBPRODUCTO,
$v_CODIGO_DEPARTAMENTO, $v_IMPORTE_BIEN, $v_CUOTA_INICIAL, $v_PLAZO, $v_CORREO,
$v_TELEFONO, $v_NOMBRE)
{
return \DB::select('CALL USP_CALCULO_CUOTA_WEB(?,?,?,?,?,?,?,?,?)',
array($v_CODIGO_MONEDA, $v_CODIGO_SUBPRODUCTO, $v_CODIGO_DEPARTAMENTO,
$v_IMPORTE_BIEN, $v_CUOTA_INICIAL, $v_PLAZO, $v_CORREO, $v_TELEFONO, $v_NOMBRE ));
}
}
AQUI LES VA EL CONTROLADOR QUE ENVIA LOS PARAMETROS.
//APLIQUEN LO QUE LES EXPLIQUE ARRIBA, LA PRIMERA MUESTRA DE CONTROLADOR SOLO
CAMBIEN ESTA PARTE DEL LLAMADO DEL METODO.
$cuota = $this->CalculoCuotaProcedure->getCuota($v_CODIGO_MONEDA,
$v_CODIGO_SUBPRODUCTO, $v_CODIGO_DEPARTAMENTO, $v_IMPORTE_BIEN, $v_CUOTA_INICIAL,
$v_PLAZO, $v_CORREO, $v_TELEFONO, $v_NOMBRE);
return View::make('web.resultadosdeposito',
compact('cuota','v_PLAZO','v_CUOTA_INICIAL','v_IMPORTE_BIEN'));
Si reciben variables de un formulario, estan deben ser validades y luego tomadas,
Input::get('nombre_del_input_html')