Header Ads Widget

Ticker

6/recent/ticker-posts

Tutorial de Laravel 8 CRUD por ejemplo

 Laravel es uno de los frameworks basados ​​en PHP más populares para crear aplicaciones basadas en bases de datos.

Laravel es descrito por sus creadores como el marco para los artesanos web. Se basa en el patrón MVC (Modelo-Vista-Controlador) y se puede utilizar para crear fácilmente aplicaciones para realizar operaciones CRUD (Crear, Recuperar, Actualizar, Eliminar) en una base de datos.

Laravel tiene una gran comunidad de desarrolladores en todo el mundo que crea paquetes para problemas comunes de desarrollo web para que otros desarrolladores no necesiten reinventar la rueda.

El equipo de Laravel lanza una nueva versión cada seis meses. En el momento de escribir este tutorial, la última versión es Laravel 8, que se lanzó el 8 de septiembre de 2020.

A lo largo de este tutorial, aprenderemos cómo crear una aplicación CRUD con Laravel 8 para crear, insertar, actualizar y eliminar productos de una base de datos MySQL.

Requisitos previos de Laravel 8

Para seguir este tutorial, deberá tener los siguientes requisitos previos:

  • PHP y MySQL instalados en su máquina de desarrollo,
  • Compositor

Paso 1: Instalación de Laravel 8

Comencemos instalando Laravel 8 usando Composer.

Abra una nueva interfaz de línea de comandos y ejecute el siguiente comando:

$ composer create-project laravel/laravel=8.0 laravel8app --prefer-dist

Laravel 8 tiene algunas características nuevas, por ejemplo, no necesitamos copiar y cambiar el nombre del env.examplearchivo, Laravel 8 se encarga de eso. Tampoco es necesario generarlo APP_KEY, se generará automáticamente.

Espere a que el compositor instale las dependencias y configure su proyecto y procedamos al siguiente paso.

Paso 2: configurar una base de datos MySQL

Ahora creemos una base de datos MySQL que usaremos para conservar los datos en nuestra aplicación Laravel. En su terminal, ejecute el siguiente comando para ejecutar el mysqlcliente:

$ mysql -u root -p

Cuando se le solicite, ingrese la contraseña de su servidor MySQL cuando lo haya instalado.

A continuación, ejecute la siguiente declaración SQL para crear una dbbase de datos:

mysql> create database db;

Abra el .envarchivo y actualice las credenciales para acceder a su base de datos MySQL:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db
DB_USERNAME=root
DB_PASSWORD=******

Debe proporcionar el nombre de la base de datos, el nombre de usuario y la contraseña.

En este punto, puede ejecutar el migratecomando para crear su base de datos y un montón de tablas SQL que Laravel necesita:

$ php artisan migrate

Nota : Puede ejecutar el migratecomando en cualquier otro punto de su desarrollo para agregar otras tablas SQL en su base de datos o posteriormente en su base de datos si necesita agregar algún cambio más adelante.

Paso 3: creación de una migración de base de datos

Crearemos una aplicación CRUD con Laravel 8 para una aplicación de productos, por lo que necesitaremos crear la tabla SQL correspondiente en la base de datos mediante una migración.

Regrese a su terminal y ejecute los siguientes comandos:

$ cd laravel8app
$ php artisan make:migration create_products_table --create=products

Se creará un archivo de migración dentro de la database/migrationscarpeta de su producto, a continuación, debemos agregar los campos a nuestra tabla de base de datos. Un producto tendrá un nombre, descripción, precio, fecha de creación y fecha de actualización.

Abra el 2020_09_12_222716_create_products_table.phparchivo que contiene la clase de migración y actualícelo de la siguiente manera:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name', 255)->nullable();
            $table->string('description', 500)->nullable();
            $table->decimal('price', 22)->nullable()->default(0.00);
            $table->timestamp('created_at')->useCurrent();
            $table->timestamp('updated_at')->nullable();
        });
    }

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

Para evitar errores, debe especificar la longitud de cadena predeterminada antes de ejecutar la migración.

Abra el app/Providers/AppServiceProvider.phparchivo y agregue Schema::defaultstringLength(191)lo siguiente:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;


class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Schema::defaultStringLength(191);
    }
}

Luego, regrese a su terminal y ejecute el siguiente comando:

$ php artisan migrate

Esto agregará los campos a nuestra tabla de base de datos.

Paso 4: agregar una ruta de recursos

Después de crear nuestra tabla de base de datos usando una migración de Laravel 8. A continuación, necesitaremos agregar rutas para nuestras operaciones CRUD.

Abra el routes\web.phparchivo y agregue nuestra ruta de recursos de la siguiente manera:

<?php

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

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


Route::resource('products', ProductController::class);

Paso 5: agregar un controlador y modelo Laravel 8

A continuación, necesitamos crear un controlador y modelo Laravel ejecutando el siguiente comando:

$ php artisan make:controller ProductController --resource --model=Product

Se le preguntará si desea crear el Productmodelo porque no existe. Escriba sí y creará el modelo y el controlador.

Abra el app/Http/Controllers/ProductController.phparchivo y actualícelo de la siguiente manera:

<?php
namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $products = Product::latest()->paginate(5);

        return view('products.index', compact('products'))
            ->with('i', (request()->input('page', 1) - 1) * 5);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('products.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'description' => 'required',
            'price' => 'required'
        ]);

        Product::create($request->all());

        return redirect()->route('products.index')
            ->with('success', 'Product created successfully.');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function show(Product $product)
    {
        return view('products.show', compact('product'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function edit(Product $product)
    {
        return view('products.edit', compact('product'));
    }
    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\product  $product
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Product $product)
    {
        $request->validate([
            'name' => 'required',
            'description' => 'required',
            'price' => 'required'
        ]);
        $product->update($request->all());

        return redirect()->route('products.index')
            ->with('success', 'Product updated successfully');
    }
    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function destroy(Product $product)
    {
        $product->delete();

        return redirect()->route('products.index')
            ->with('success', 'Product deleted successfully');
    }
}


Laravel 8 hace uso de una carpeta de modelos para almacenar archivos de modelo.

Abra app/Models/Product.php, agregue las siguientes funciones y los rellenables, los rellenables son los campos en la base de datos que un usuario puede llenar:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;

    protected $table = 'products';
    public $timestamps = true;

    protected $casts = [
        'price' => 'float'
    ];

    protected $fillable = [
        'name',
        'description',
        'price',
        'created_at'
    ];
}

Paso 6: agregar sus vistas de hoja Larevl 8

Laravel hace uso del sistema de plantillas de hoja para las vistas.

Dentro de la resources/viewscarpeta, cree dos carpetas LayoutsProducts.

Actualice el Layouts/App.blade.phparchivo con el siguiente contenido:

<html>

<head>
    <title>App Name - @yield('title')</title>

    <!-- Bootstrap -->
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.css" rel="stylesheet">

    <!-- Font Awesome JS -->
    <script defer src="https://use.fontawesome.com/releases/v5.0.13/js/solid.js"
        integrity="sha384-tzzSw1/Vo+0N5UhStP3bvwWPq+uvzCMfrN1fEFe+xBmv1C/AtVX5K0uZtmcHitFZ" crossorigin="anonymous">
    </script>
    <script defer src="https://use.fontawesome.com/releases/v5.0.13/js/fontawesome.js"integrity="sha384-6OIrr52G08NpOFSZdxxz1xdNSndlD4vdcf/q2myIUVO0VsqaGHJsB0RaBE01VTOY" crossorigin="anonymous">
    </script>

    <style>
        .footer {
            position: fixed;
            left: 0;
            bottom: 0;
            width: 100%;
            background-color: #9C27B0;
            color: white;
            text-align: center;
        }

    </style>

</head>

<body>
    @section('sidebar')

    @show

    <div class="container">
        @yield('content')
    </div>
</body>

</html>

Abra Index.blade.phpy actualícelo de la siguiente manera:

@extends('layouts.app')

@section('content')
    <div class="row">
        <div class="col-lg-12 margin-tb">
            <div class="pull-left">
                <h2>Laravel 8 CRUD Example </h2>
            </div>
            <div class="pull-right">
                <a class="btn btn-success" href="" title="Create a product"> <i class="fas fa-plus-circle"></i>
                    </a>
            </div>
        </div>
    </div>

    @if ($message = Session::get('success'))
        <div class="alert alert-success">
            <p></p>
        </div>
    @endif

    <table class="table table-bordered table-responsive-lg">
        <tr>
            <th>No</th>
            <th>Name</th>
            <th>description</th>
            <th>Price</th>
            <th>Date Created</th>
            <th>Actions</th>
        </tr>
        @foreach ($products as $product)
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td>
                    <form action="" method="POST">

                        <a href="" title="show">
                            <i class="fas fa-eye text-success  fa-lg"></i>
                        </a>

                        <a href="">
                            <i class="fas fa-edit  fa-lg"></i>
                        </a>

                        @csrf
                        @method('DELETE')

                        <button type="submit" title="delete" style="border: none; background-color:transparent;">
                            <i class="fas fa-trash fa-lg text-danger"></i>
                        </button>
                    </form>
                </td>
            </tr>
        @endforeach
    </table>

    {!! $products->links() !!}

@endsection

Abra el create.blade.phparchivo y actualícelo de la siguiente manera:

@extends('layouts.app')

@section('content')
    <div class="row">
        <div class="col-lg-12 margin-tb">
            <div class="pull-left">
                <h2>Add New Product</h2>
            </div>
            <div class="pull-right">
                <a class="btn btn-primary" href="" title="Go back"> <i class="fas fa-backward "></i> </a>
            </div>
        </div>
    </div>

    @if ($errors->any())
        <div class="alert alert-danger">
            <strong>Error!</strong> 
            <ul>
                @foreach ($errors->all() as $error)
                    <li></li>
                @endforeach
            </ul>
        </div>
    @endif
    <form action="" method="POST" >
        @csrf

        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Name:</strong>
                    <input type="text" name="name" class="form-control" placeholder="Name">
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Description:</strong>
                    <textarea class="form-control" style="height:50px" name="introduction"
                        placeholder="description"></textarea>
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Price:</strong>
                    <input type="number" name="price" class="form-control" placeholder="Put the price">
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                <button type="submit" class="btn btn-primary">Submit</button>
            </div>
        </div>

    </form>
@endsection

Abra el edit.blade.phparchivo y actualícelo de la siguiente manera:

@extends('layouts.app')

@section('content')
    <div class="row">
        <div class="col-lg-12 margin-tb">
            <div class="pull-left">
                <h2>Edit Product</h2>
            </div>
            <div class="pull-right">
                <a class="btn btn-primary" href="" title="Go back"> <i class="fas fa-backward "></i> </a>
            </div>
        </div>
    </div>

    @if ($errors->any())
        <div class="alert alert-danger">
            <strong>Error!</strong>
            <ul>
                @foreach ($errors->all() as $error)
                    <li></li>
                @endforeach
            </ul>
        </div>
    @endif

    <form action="" method="POST">
        @csrf
        @method('PUT')

        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Name:</strong>
                    <input type="text" name="name" value="" class="form-control" placeholder="Name">
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Description</strong>
                    <textarea class="form-control" style="height:50px" name="description"
                        placeholder="description"></textarea>
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Price</strong>
                    <input type="number" name="price" class="form-control" placeholder=""
                        value="">
                </div>
            </div>
            <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                <button type="submit" class="btn btn-primary">Submit</button>
            </div>
        </div>

    </form>
@endsection

Abra el show.blade.phparchivo y actualícelo de la siguiente manera:

@extends('layouts.app')


@section('content')
    <div class="row">
        <div class="col-lg-12 margin-tb">
            <div class="pull-left">
                <h2>  </h2>
            </div>
            <div class="pull-right">
                <a class="btn btn-primary" href="" title="Go back"> <i class="fas fa-backward "></i> </a>
            </div>
        </div>
    </div>

    <div class="row">
        <div class="col-xs-12 col-sm-12 col-md-12">
            <div class="form-group">
                <strong>Name:</strong>

            </div>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-12">
            <div class="form-group">
                <strong>Description</strong>

            </div>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-12">
            <div class="form-group">
                <strong>Price</strong>

            </div>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-12">
            <div class="form-group">
                <strong>Date Created</strong>

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

Eso es todo, hemos terminado de implementar nuestra aplicación Laravel 8 CRUD.

Puede servir su aplicación Laravel 8 usando el siguiente comando:

$ php artisan serve

Puede acceder a su aplicación desde http://127.0.0.1:8000.

Publicar un comentario

0 Comentarios