Está en la página 1de 9

CRUD2 con Laravel

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


trata de dar mantenimiento a la tabla de Obras
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 los siguientes datos iniciales


Regiones: LIMA, PIURA, LA LIBERTAD, AREQUIPA
Tipodeobras: PUENTE, COLEGIO, CARRETERA
Obra: PUENTE LIBERTADORES EN LIMA CON MONTO DE 100,000

2. Iniciar la consola de comandos y ubicarse en la raíz del disco c para crear el


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

3. Crear el script de base de datos y grabarlo en la carpeta crud2\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));
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,'PUENTE LIBERTADORES',1,1,100000);
CRUD2 con Laravel

4. Iniciar XAMPP con Apache y Mysql para ejecutar el script de la base de datos
con Phpmyadmin y con EMS SQL Manager validar el modelo debiendo
obtener el siguiente diagrama visual

5. Ingresando a la carpeta de CRUD2 crear los modelos Region, Tipodeobra y


Obra

C:\crud2>php artisan make:model Region

C:\crud2>php artisan make:model Tipodeobra

C:\crud2>php artisan make:model Obra

Luego en crud2\app establecemos para cada modelo

class Region extends Model


{
//
protected $table='regiones';
protected $primaryKey='idregion';
protected $fillable=['region'];
public $timestamps=false;
}

class Tipodeobra extends Model


{
//
protected $primaryKey='idtipodeobra';
protected $fillable=['tipodeobra'];
public $timestamps=false;
}
CRUD2 con Laravel

class Obra extends Model


{
//
protected $primaryKey='idobra';
protected $fillable=['obra','idtipodeobra','idregion','monto'];
public $timestamps=false;
}

6. Creamos el controlador únicamente para la Obras

C:\crud2>php artisan make:controller ObraController --resource

7. Implementamos los métodos del controlador ObraController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Tipodeobra;
use App\Region;
use App\Obra;
use DB;

class ObraController extends Controller


{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/

public function index()


{
$regiones=Region::all();
$tipodeobras=Tipodeobra::all();
$obras=DB::table('obras as o')->join('regiones as
r','o.idregion','=','r.idregion')->join('tipodeobras as
t','o.idtipodeobra','=','t.idtipodeobra')-
>select('o.idobra','o.obra','t.tipodeobra','r.region','o.monto')->paginate(5);
return view('obras.index',
['regiones'=>$regiones,'tipodeobras'=>$tipodeobras,'obras'=>$obras]);
}
/**
CRUD2 con Laravel

* Show the form for creating a new resource.


*
* @return \Illuminate\Http\Response
*/
public function create()
{
$regiones=Region::all();
$tipodeobras=Tipodeobra::all();
return view('obras.create',
['regiones'=>$regiones,'tipodeobras'=>$tipodeobras]);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
Obra::create($request->all());
return redirect()->route('obra.index');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$obra=Obra::find($id);
$regiones=Region::all();
$tipodeobras=Tipodeobra::all();
return view('obras.edit',
['obra'=>$obra,'regiones'=>$regiones,'tipodeobras'=>$tipodeobras]);

}
CRUD2 con Laravel

/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
Obra::find($id)->update($request->all());
return redirect()->route('obra.index');
}

/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Obra::find($id)->delete();
return redirect()->route('obra.index');

}
}

8. Crear la ruta que hará uso de los métodos del controlador. En la carpeta del
proyecto CRUD y dentro de la subcarpeta routes se encuentra ubicado el
archivo de rutas web.php en donde debemos especificar el nombre de la ruta y
el controlador por medio de una ruta de tipo recursos.

Route::get('/', function () {
return view('welcome');
});
Route::resource('obra','ObraController');

9. Copiamos todas las carpetas contenidas dentro de la plantilla AdminLTE a la


carpeta public contenida dentro de CRUD2. Así mismo creamos la plantilla
copiando el archivo index.html de la plantilla AdminLTE en la carpeta
\resources\views y lo renombramos con el nombre de plantilla.blade.php.
Luego hacemos los siguientes cambios
CRUD2 con Laravel

<link rel="stylesheet" href="{{asset('css/bootstrap.min.css')}}">


<link rel="stylesheet" href="{{asset('css/font-awesome.css')}}">
<link rel="stylesheet" href="{{asset('css/AdminLTE.min.css')}}">
<link rel="stylesheet" href="{{asset('css/_all-skins.min.css')}}">
<link rel="shortcut icon" href="{{asset('img/favicon.ico')}}">

<script src="{{asset('js/jQuery-2.1.4.min.js')}}"></script>
<script src="{{asset('js/bootstrap.min.js')}}"></script>
<script src="{{asset('js/app.min.js')}}"></script>


<li class="treeview">
<a href="#">
<i class="fa fa-shopping-cart"></i>
<span>Ventas</span>
<i class="fa fa-angle-left pull-right"></i>
</a>
<ul class="treeview-menu">
<li><a href="{{route('obra.index')}}"><i class="fa fa-circle-o"></i>
Registro </a></li>
</ul>
</li>

<div class="col-md-12">
<h3>@yield('contenido')</h3>
</div>

Ahora dentro de la misma carpeta \resources\views creamos el archivo


index.blade.php que extenderá el uso de la plantilla el cual deberá tener solo el
siguiente código

@extends('plantilla')

Finalmente hacer el cambio en el archivo de rutas para que invoque al archivo


index

Route::get('/', function () {
return view('index');
});
Route::resource('obra','ObraController');
CRUD2 con Laravel

10. Crear las Vistas para lo que necesitamos crear una nueva carpeta dentro de
CRUD\resources\views que tendrá el nombre de obras. A continuación, cada
uno de los archivos .blade.php dentro de la carpeta
CRUD\resource\views\obras

index.blade.php
@extends('plantilla')
@section('contenido')
<h3>Listado de Obras</h3>
<a href="{{action('ObraController@create')}}" class="btn btn-
success">Agregar</a>
<table class="table">
<thead><th>Obra</th><th>Tipo</th><th>Region</th>
<th>Monto</th><th>Acciones</th></thead>
<tbody>
@foreach($obras as $obra)
<tr>
<td>{{$obra->obra}}</td><td>{{$obra->tipodeobra}}</td><td>{{$obra-
>region}}</td><td>{{$obra->monto}}</td>
<td>
<a class="btn btn-primary" href="{{action('ObraController@edit',$obra-
>idobra)}}">Editar</a>
<form action="{{action('ObraController@destroy', $obra->idobra)}}"
method="post">
@csrf
<input name="_method" type="hidden" value="DELETE">
<input type="submit" value="Eliminar" class="btn btn-danger" onclick="return
confirm('Eliminar ?')">
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
<div align="center"><h5>{{$obras->links()}}</h5></div>
@stop

create.blade.php
@extends('plantilla')
@section('contenido')
<h3>Registo de Obra</h3>
<form method="POST" action="{{route('obra.store')}}" >
@csrf
<label for="">Obra</label>
<input type="text" name="obra" required><br>
<label for="">Tipo</label>
CRUD2 con Laravel

<select name="idtipodeobra" id="">


@foreach($tipodeobras as $tipodeobra)
<option value="{{$tipodeobra->idtipodeobra}}">{{$tipodeobra-
>tipodeobra}}</option>
@endforeach
</select><br>
<label for="">Region</label>
<select name="idregion" id="">
@foreach($regiones as $region)
<option value="{{$region->idregion}}">{{$region->region}}</option>
@endforeach
</select><br>
<label for="">Monto</label>
<input type="number" name="monto"><br>
<input type="submit" value="Grabar" onclick="return confirm('Grabar ?')">

</form>
<a href="{{route('obra.index')}}" class="btn btn-primary">Volver</a>
@stop

edit.blade.php
@extends('plantilla')
@section('contenido')
<h3>Edicion de Obra</h3>
<form method="POST" action="{{route('obra.update',$obra->idobra)}}" >
@csrf
<input name="_method" type="hidden" value="PATCH">
<label for="">Obra</label>
<input type="text" name="obra" required value="{{$obra->obra}}"><br>
<label for="">Tipo</label>
<select name="idtipodeobra" id="">
@foreach($tipodeobras as $tipodeobra)
<option value="{{$tipodeobra->idtipodeobra}}"
@if($obra->idtipodeobra==$tipodeobra->idtipodeobra)
selected="selected"
@endif
>{{$tipodeobra->tipodeobra}}</option>
@endforeach
</select><br>
<label for="">Region</label>
<select name="idregion" id="">
@foreach($regiones as $region)
<option value="{{$region->idregion}}"
@if($region->idregion==$obra->idregion)
selected
CRUD2 con Laravel

@endif
>{{$region->region}}</option>
@endforeach
</select><br>
<label for="">Monto</label>
<input type="number" name="monto" value="{{$obra->monto}}"><br>
<input type="submit" value="Grabar">
</form>
<a href="{{route('obra.index')}}" class="btn btn-primary">Volver</a>
@stop

11. 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=

12. Ejecutar el sitio

En ventana de comandos
C:\crud2>php artisan serve

En navegador
http://127.0.0.1:8000

También podría gustarte