[go: up one dir, main page]

0% encontró este documento útil (0 votos)
15 vistas10 páginas

Ejercicios 1era Unidad - Removed

Larevel ejercicio
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
15 vistas10 páginas

Ejercicios 1era Unidad - Removed

Larevel ejercicio
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 10

Tecnologías Web

Ejercicios 1era Unidad - Laravel

03. Obras
Elaborar una aplicación web que implemente el registro de obras en regiones y por tipo de obra.

1. Proyecto
composer create-project laravel/laravel taller03

2. 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 los siguientes datos iniciales


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

script.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');
Tecnologías Web
Ejercicios 1era Unidad - Laravel

insert tipodeobras values(null,'CARRETERA');


insert obras values(null,'PUENTE LIBERTADORES',1,1,100000);

Ejecutar mediante phpMyAdmin (http://localhost/phpmyadmin/) el archivo script.sql

Debiendo obtener el siguiente resultado


Tecnologías Web
Ejercicios 1era Unidad - Laravel
Establecer la conexión con la base de datos en el archivo .env en la carpeta principal del proyecto

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

En el terminal de comandos ejecutar


php artisan migrate

A nuestra base de datos PCM agrega las tablas que requiere para implementar modelos de
seguridad.
3. Modelo
php artisan make:model Region

php artisan make:model Tipodeobra

php artisan make:model Obra -cr

(Nota) En Laravel, los modelos son clases que representan a las tablas en la base de datos. Se
utilizan para interactuar con la base de datos y realizar operaciones como insertar, actualizar y
eliminar datos. Los modelos se almacenan en la carpeta "app\Models" y se pueden crear
utilizando el comando php artisan make:model <model>
• Los modelos usan convenciones para que a Laravel se le facilite el trabajo y nos ahorre tanto
líneas de código como tiempo para relacionar más modelos, las cuales son:
• El nombre de los modelos se escribe en singular, en contraste con las tablas de la BD que se
escriben en plural.
Tecnologías Web
Ejercicios 1era Unidad - Laravel

• Usan notación UpperCamelCase (cuando la primera letra de cada una de las palabras es
mayúscula) para sus nombres.
• Utilizamos -cr para crear en una sola línea el Controlador con los métodos para implementar el
crud (index, créate, store, show, edit, update, destroy). Los controladores se crean dentro de la
carpeta app\Http\Controllers
Establecer el contenido de los siguientes archivos

Region.php

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Region extends Model
{
use HasFactory;
protected $table='regiones';
protected $primaryKey='idregion';
protected $fillable=['region'];
public $timestamps=false;
}

$fillable: Especifica qué campos del modelo se pueden rellenar mediante asignación masiva
Tipodeobra.php

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Tipodeobra extends Model
{
use HasFactory;
protected $primaryKey='idtipodeobra';
protected $fillable=['tipodeobra'];
public $timestamps=false;
}

Obra.php

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Obra extends Model
{
Tecnologías Web
Ejercicios 1era Unidad - Laravel

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

4. Vista
Las vistas se crean dentro de la carpeta del proyecto denominada resources\views
Dentro de la carpeta resources\views crear una carpeta denominada layouts que contendrá:

plantilla.blade.php

<!DOCTYPE html>
<html><head><title>CRUD con Laravel</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-
scalable=yes">
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-
ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
crossorigin="anonymous">
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-
JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"></script>
</head>
<body>
<div class="container-fluid">
@yield('contenido')
</div></body></html>

Dentro de la carpeta resources\views crear una carpeta denominada obras que contendrá:

index.blade.php

@extends('layouts.plantilla')
@section('contenido')
<div class="row">
<div class="col-12">
<h3>Lista de Obras</h3>
<a href="{{ route('obra.create') }}" class="btn btn-info">Agregar</a>
<table class="table table-bordred table-striped">
<thead>
<th>Obra</th>
<th>Tipo</th>
Tecnologías Web
Ejercicios 1era Unidad - Laravel

<th>Region</th>
<th>Monto</th><th>Acciones</th>
</thead>
<tbody>
@if($obras->count())
@foreach($obras as $obra)
<tr>
<td>{{$obra->obra}}</td>
<td>{{$obra->tipodeobra}}</td>
<td>{{$obra->region}}</td>
<td>{{$obra->monto}}</td>
<td>
<a href="{{ route('obra.edit',$obra->idobra) }}" class="btn btn-
primary" >Editar</a>
<form action="{{ route('obra.destroy',$obra->idobra) }}"
method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger" onclick="return
confirm('Eliminar ?')">Borrar</button>
</form>
</td>
</tr>
@endforeach
@else
<tr>
<td colspan="3">No hay registro !!</td>
</tr>
@endif
</tbody>
</table>
</div>
</div>
@stop

create.blade.php

@extends('layouts.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>
<select name="idtipodeobra" id="">
@foreach($tipodeobras as $tipodeobra)
<option value="{{$tipodeobra->idtipodeobra}}">{{$tipodeobra-
>tipodeobra}}</option>
Tecnologías Web
Ejercicios 1era Unidad - Laravel

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

edit.blade.php

@extends('layouts.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
@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" class="btn btn-success">
Tecnologías Web
Ejercicios 1era Unidad - Laravel

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

5. Controlador
Los controladores se crean dentro de la carpeta del proyecto denominada app\Http\Controllers

ObraController.php

<?php

namespace App\Http\Controllers;

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

class ObraController extends Controller


{
/**
* Display a listing of the resource.
*/
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]);

/**
* Show the form for creating a new resource.
*/
public function create()
{
//
$regiones=Region::all();
$tipodeobras=Tipodeobra::all();
return
view('obras.create',['regiones'=>$regiones,'tipodeobras'=>$tipodeobras]);

/**
* Store a newly created resource in storage.
Tecnologías Web
Ejercicios 1era Unidad - Laravel
*/
public function store(Request $request)
{
//
Obra::create($request->all());
return redirect()->route('obra.index');

/**
* Display the specified resource.
*/
public function show(Obra $obra)
{
//

/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
//
$obra=Obra::find($id);
$regiones=Region::all();
$tipodeobras=Tipodeobra::all();
return
view('obras.edit',['obra'=>$obra,'regiones'=>$regiones,'tipodeobras'=>$tipodeo
bras]);

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

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

}
}
Tecnologías Web
Ejercicios 1era Unidad - Laravel

6. Rutas
web.php
<?php

use App\Http\Controllers\ObraController;
use Illuminate\Support\Facades\Route;

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

7. Ejecutar la Aplicación
Dentro de la ventana de comandos o terminal ejecutar el siguiente comando
php artisan serve
En navegador http://127.0.0.1:8000/obra

También podría gustarte