10. Curso de Laravel

10.-Laravel Tutorial en Español [crud] ¡¡En tiempo récord⚡!!

10. Curso%2Bde%2BLaravel

INTRODUCCION

En este tutorial vamos a trabajar con bases de datos osea CRUD para los que no sepan que es crud CRUD es esto
C= Create
R=Read
U=Update
D=Delete
En español
C= Crear
R=Leer
U=Actualizar
D=Borrar
En otras palabras vamos a crear , leer, actualizar y borrar registros de nuestra base de datos.

INSTALACION DE LARAVEL

Nos ubicamos en la carpeta de nuestra instalación de xampp en mi caso

cd /var/www/html

Creamos el proyecto de laravel con este comando

composer create-project laravel/laravel crudlaravel

Recordemos editar el archivo .env que esta en la raíz del proyecto con los accesos a nuestra bd.

Entramos en la carpeta del proyecto

cd crudlaravel

MIGRACIÓN Y MODELO

Creamos una migración

php artisan make:migration create_libros_table

Se creo un archivo en database/migrations/fecha_hash_create_libros_table.php lo editamos y debe quedar asi:

<?php

use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

class CreateLibrosTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('libros', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nombre');
            $table->string('resumen');
            $table->integer('npagina');
            $table->integer('edicion');
            $table->string('autor');
            $table->decimal('precio',5,2);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('libros');
    }
}

Ejecutamos la migracion:

php artisan migrate

Ahora creamos el modelo

php artisan make:model Libro

Se creo el archivo app/Libro.php ahora lo editamos para que quede asi:

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Libro extends Model
{
    //
     protected $fillable = ['nombre', 'resumen', 'npagina','edicion','autor','precio'];
}

CONTROLADOR

Ahora creamos el controlador ejecutando este comando:

php artisan make:controller LibroController --resource

Se genero este archivo app/Http/Controllers/LibroController.php lo editamos para que quede asi:

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppLibro;

class LibroController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return IlluminateHttpResponse
     */
    public function index()
    {
        //
        $libros=Libro::orderBy('id','DESC')->paginate(3);
        return view('Libro.index',compact('libros'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return IlluminateHttpResponse
     */
    public function create()
    {
        //
        return view('Libro.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function store(Request $request)
    {
        //
        $this->validate($request,[ 'nombre'=>'required', 'resumen'=>'required', 'npagina'=>'required', 'edicion'=>'required', 'autor'=>'required', 'npagina'=>'required', 'precio'=>'required']);
        Libro::create($request->all());
        return redirect()->route('libro.index')->with('success','Registro creado satisfactoriamente');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function show($id)
    {
        //
        $libros=Libro::find($id);
        return  view('Libro.show',compact('libros'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function edit($id)
    {
        //
        $libro=libro::find($id);
        return view('Libro.edit',compact('libro'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, $id)
    {
        //
        $this->validate($request,[ 'nombre'=>'required', 'resumen'=>'required', 'npagina'=>'required', 'edicion'=>'required', 'autor'=>'required', 'npagina'=>'required', 'precio'=>'required']);
 
        libro::find($id)->update($request->all());
        return redirect()->route('libro.index')->with('success','Registro actualizado satisfactoriamente');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function destroy($id)
    {
        //
        Libro::find($id)->delete();
        return redirect()->route('libro.index')->with('success','Registro eliminado satisfactoriamente');
    }
}

RUTAS

Vamos a las rutas en el archivo routes/web.php y lo editamos para que quede asi:

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

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

Route::resource('libro', 'LibroController');

VISTAS

Creanos la carpeta /resources/views/layouts y dentro de layouts creamos el archivo layout.blade.php donde colocaremos este codigo:

<!DOCTYPE html>
<html lang="es">
<head>
 <meta charset="utf-8">
 <meta name="viewport"
 content="width=device-width, initial-scale=1, user-scalable=yes">
 <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>

 <div class="container-fluid" style="margin-top: 100px">

  @yield('content')
 </div>
 <style type="text/css">
 .table {
  border-top: 2px solid #ccc;

 }
</style>
</body>
</html>

Creanos la carpeta /resources/views/Libro y dentro de Libro creamos el archivo index.blade.php donde colocaremos este codigo:

@extends('layouts.layout')
@section('content')
<div class="row">
  <section class="content">
    <div class="col-md-8 col-md-offset-2">
      <div class="panel panel-default">
        <div class="panel-body">
          <div class="pull-left"><h3>Lista Libros</h3></div>
          <div class="pull-right">
            <div class="btn-group">
              <a href="{{ route('libro.create') }}" class="btn btn-info" >Añadir Libro</a>
            </div>
          </div>
          <div class="table-container">
            <table id="mytable" class="table table-bordred table-striped">
             <thead>
               <th>Nombre</th>
               <th>Resumen</th>
               <th>No. Páginas</th>
               <th>Edicion</th>
               <th>Autor</th>
               <th>Precio</th>
               <th>Editar</th>
               <th>Eliminar</th>
             </thead>
             <tbody>
              @if($libros->count())  
              @foreach($libros as $libro)  
              <tr>
                <td>{{$libro->nombre}}</td>
                <td>{{$libro->resumen}}</td>
                <td>{{$libro->npagina}}</td>
                <td>{{$libro->edicion}}</td>
                <td>{{$libro->autor}}</td>
                <td>{{$libro->precio}}</td>
                <td><a class="btn btn-primary btn-xs" href="{{action('LibroController@edit', $libro->id)}}" ><span class="glyphicon glyphicon-pencil"></span></a></td>
                <td>
                  <form action="{{action('LibroController@destroy', $libro->id)}}" method="post">
                   {{csrf_field()}}
                   <input name="_method" type="hidden" value="DELETE">

                   <button class="btn btn-danger btn-xs" type="submit"><span class="glyphicon glyphicon-trash"></span></button>
                 </td>
               </tr>
               @endforeach 
               @else
               <tr>
                <td colspan="8">No hay registro !!</td>
              </tr>
              @endif
            </tbody>

          </table>
        </div>
      </div>
      {{ $libros->links() }}
    </div>
  </div>
</section>

@endsection

Dentro de la carpeta /resources/views/Libro creamos el archivo create.blade.php donde colocaremos este codigo:

@extends('layouts.layout')
@section('content')
<div class="row">
 <section class="content">
  <div class="col-md-8 col-md-offset-2">
   @if (count($errors) > 0)
   <div class="alert alert-danger">
    <strong>Error!</strong> Revise los campos obligatorios.<br><br>
    <ul>
     @foreach ($errors->all() as $error)
     <li>{{ $error }}</li>
     @endforeach
    </ul>
   </div>
   @endif
   @if(Session::has('success'))
   <div class="alert alert-info">
    {{Session::get('success')}}
   </div>
   @endif

   <div class="panel panel-default">
    <div class="panel-heading">
     <h3 class="panel-title">Nuevo Libro</h3>
    </div>
    <div class="panel-body">     
     <div class="table-container">
      <form method="POST" action="{{ route('libro.store') }}"  role="form">
       {{ csrf_field() }}
       <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="nombre" id="nombre" class="form-control input-sm" placeholder="Nombre del libro">
         </div>
        </div>
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="npagina" id="npagina" class="form-control input-sm" placeholder="Número de Páginas">
         </div>
        </div>
       </div>

       <div class="form-group">
        <textarea name="resumen" class="form-control input-sm" placeholder="Resumen"></textarea>
       </div>
       <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="edicion" id="edicion" class="form-control input-sm" placeholder="Edición del libro">
         </div>
        </div>
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="precio" id="precio" class="form-control input-sm" placeholder="Precio del libro">
         </div>
        </div>
       </div>
       <div class="form-group">
        <textarea name="autor" class="form-control input-sm" placeholder="Autor"></textarea>
       </div>
       <div class="row">

        <div class="col-xs-12 col-sm-12 col-md-12">
         <input type="submit"  value="Guardar" class="btn btn-success btn-block">
         <a href="{{ route('libro.index') }}" class="btn btn-info btn-block" >Atrás</a>
        </div> 

       </div>
      </form>
     </div>
    </div>

   </div>
  </div>
 </section>
 @endsection

Dentro de la carpeta /resources/views/Libro creamos el archivo edit.blade.php donde colocaremos este codigo:

@extends('layouts.layout')
@section('content')
<div class="row">
 <section class="content">
  <div class="col-md-8 col-md-offset-2">
   @if (count($errors) > 0)
   <div class="alert alert-danger">
    <strong>Error!</strong> Revise los campos obligatorios.<br><br>
    <ul>
     @foreach ($errors->all() as $error)
     <li>{{ $error }}</li>
     @endforeach
    </ul>
   </div>
   @endif
   @if(Session::has('success'))
   <div class="alert alert-info">
    {{Session::get('success')}}
   </div>
   @endif

   <div class="panel panel-default">
    <div class="panel-heading">
     <h3 class="panel-title">Nuevo Libro</h3>
    </div>
    <div class="panel-body">     
     <div class="table-container">
      <form method="POST" action="{{ route('libro.update',$libro->id) }}"  role="form">
       {{ csrf_field() }}
       <input name="_method" type="hidden" value="PATCH">
       <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="nombre" id="nombre" class="form-control input-sm" value="{{$libro->nombre}}">
         </div>
        </div>
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="npagina" id="npagina" class="form-control input-sm" value="{{$libro->npagina}}">
         </div>
        </div>
       </div>

       <div class="form-group">
        <textarea name="resumen" class="form-control input-sm"  placeholder="Resumen">{{$libro->resumen}}</textarea>
       </div>
       <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="edicion" id="edicion" class="form-control input-sm" value="{{$libro->edicion}}">
         </div>
        </div>
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="precio" id="precio" class="form-control input-sm" value="{{$libro->precio}}">
         </div>
        </div>
       </div>
       <div class="form-group">
        <textarea name="autor" class="form-control input-sm" placeholder="Autor">{{$libro->autor}}</textarea>
       </div>
       <div class="row">

        <div class="col-xs-12 col-sm-12 col-md-12">
         <input type="submit"  value="Actualizar" class="btn btn-success btn-block">
         <a href="{{ route('libro.index') }}" class="btn btn-info btn-block" >Atrás</a>
        </div> 

       </div>
      </form>
     </div>
    </div>

   </div>
  </div>
 </section>
 @endsection

2 respuestas a “10.-Laravel Tutorial en Español [crud] ¡¡En tiempo récord⚡!!”

  1. Ervin dice:

    Excelente amigo, me encantan tus tutoriales! No tenía ni idea de laravel y ya voy por acá.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *