Notification of features

Important Note
Aug. 21, 2017

CRUD en Laravel Parte 3: Crear Producto con imagen

 

 

En esta parte vamos a crear categorías para luego asignarlas a los productos. Lo primero que vamos hacer es crear los items en el menú del template master.blade.php luego vamos a crear la view para añadir, luego listar y por último editar.

 

Vamos a crear los items de menú para eso tenemos que editar el archivo: resources > views > layouts > master.blade.php

        <li class="treeview">
          <a href="#"><i class="fa fa-cube"></i> <span>Products</span>
            <span class="pull-right-container">
                <i class="fa fa-angle-left pull-right"></i>
              </span>
          </a>
          <ul class="treeview-menu">
            <li><a href="/products/"> <i class="fa fa-list-alt"></i> List of Products</a></li>
            <li><a href="/products/create/"> <i class="fa  fa-plus"></i> Add Product</a></li>
          </ul>
        </li>

        <li class="treeview">
          <a href="#"><i class="fa fa-tags"></i> <span>Categories</span>
            <span class="pull-right-container">
                <i class="fa fa-angle-left pull-right"></i>
              </span>
          </a>
          <ul class="treeview-menu">
            <li><a href="/categories/"> <i class="fa fa-list-alt"></i> List of categories</a></li>
            <li><a href="/categories/create/"> <i class="fa  fa-plus"></i> Add Category</a></li>
          </ul>
        </li>

 

Este código tiene que ir del <i> dashboard, pueden fijarse en el repositorio del código.

Ahora vamos a crear el modelo Product

php artisan make:model Product --migration

 

Procedemos agregar un nombre, descripción, precio, imagen al producto: database > migrations > create_products_table: Después de la línea 17 (ID)

            $table->string('name');
            $table->longText('description');
            $table->string('price');
            $table->string('image');

Ahora vamos a definir los campos en app > Product.php agregamos el siguiente atributo a la clase Product.php

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

 

 

Ahora tenemos que crear otro modelo llamado Category:

php artisan make:model Category --migration

 

Procedemos agregar un nombre y una descripción a la categoría: database > migrations > create_categories_table: Después de la línea 17 (ID)

            $table->string('name');
            $table->longText('description');

 

Ahora vamos a definir los campos en app > Category.php agregamos el siguiente atributo a la clase Category.php

protected $fillable = [
      'name', 'description'
  ];

 

Ahora necesitamos crear una tercera tabla para hacer las relaciones que x producto tiene x categorias para eso tenemos que crear una nueva migración:

php artisan make:migration create_products_categories_table

 

Editamos esta migración en: database > migrations > create_products_categories_table.php

Dentro de la función llamada up agregamos lo siguiente:

      Schema::create('products_categories', function (Blueprint $table) {
          $table->increments('id');
          $table->foreign('product_id')->references('id')->on('products');
          $table->foreign('category_id')->references('id')->on('categories');
          $table->timestamps();
      });

 

Agregamos la siguiente función en la clase Product.php dentro de: app > Product.php

  public function categories() {
    return this -> belongsToMany('App\Category');
  }

 

Agregamos la siguiente función en la clase Category.php dentro de: app > Category.php

  public function products() {
    return $this -> belongsTo('Product', 'products_categories');
  }

 

Luego de esto vamos a crear el Controller para este modelo:

php artisan make:controller ProductController --resource

 

Luego creamos otro controller --resource para Category:

php artisan make:controller CategoryController --resource

 

Ahora solo nos vamos al archivo: routes > web.php

Route::resource('products', 'ProductController');
Route::resource('categories', 'CategoryController');

 

Ahora vamos hacer el formulario para crear categorías, para eso creamos una view en: resources > views > categories > create.blade.php

@extends('layouts.master')

@section('content')
  Add Category Section
@stop

 

Ahora debemos ir a app > Http > Controllers > CategoryController en public function create y colocar:

return view('categories.create');

 

Ahora te preguntas ¿Por qué no me sale Add Category Section?

Tienes que ir a resources > views > layouts > master.blade.php por la línea 171 verás el section content y agregas:

@yield(content)

 

Tiene que quedar algo así:

    <section class="content-header">
      @yield('content')
    </section>

 

Con esto le decimos al template que ahí va ir metido el contenido de cada página

Ahora vamos a copiar el contenido del template categories > create.blade.php desde el repositorio de GitHub. Si copian ese código ya les tiene que funcionar el envío del create a la función store de CategoryController.php. y agregams lo siguiente en la función llamada store:

      $category = new Category();
      $category -> name = $request -> name;
      $category -> description = $request -> description;
      $category -> save();

 

Con esto ya estamos creando una categoría, ahora vamos a listarlas. Primero tenemos que agregar el siguiente código a la función index

      $categories = Category::all();
      return view('categories.index', [ 'categories' => $categories ]);

 

Vamos agregar la siguiente función antes de la index en el archivo CategoryController.php

  public function __construct() {
    $this->middleware('auth');
  }

 

 

 

Tags: laravel backend