Creación de un blog con Laravel en Soluciones++

 


Creación de un blog personal con Laravel

  1. Creación e instalación del proyecto:
    • $ composer create-project laravel/laravel nombre
  • Nota: si no se le coloca nombre al proyecto se instalará en el directorio que se esta ejecutando. Para nuestro caso ejecutaremos:
    • $composer create-project laravel/laravel blog
  • Nota: para levantar un servidor local para probar la aplicación:
    • $ php artisan serve --port=5000
  • Nota: la parte --port=5000 es opcional, e indica el puerto en donde se levantará el servicio web.
  1. Crear base de datos MySQL con el nombre blog.
  2. Configurar conexión a la base de datos en el archivo .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=clave
  1. Preparar la migración de la tabla users modificando el archivo database/migrations/2014_10_12_000000_create_users_table.php:
*****
    public function up()
    {
        Schema::create('users'function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->enum('type', ['member', 'admin'])->default('member');
            $table->rememberToken();
            $table->timestamps();
        });
    }
*****
  1. Para crear una nueva migración para la tabla categories:
    • $ php artisan make:migration add_categories_table --create=categories
  1. Para establecer los campos de la tabla categories modificamos el archivo database/migrations/2020_08_17_213251_add_categories_table.php:
*****
    public function up()
    {
        Schema::create('categories'function (Blueprint $table) {
            $table->id();
            $table->string('name', 60);
            $table->timestamps();
        });
    }
*****
  1. Para ejecutar las migraciones:
    • $ php artisan migrate
  1. Crear la migración para la tabla articles:
    • $ php artisan make:migration add_articles_table --create=articles
  1. Para establecer los campos de la tabla articles modificamos el archivo database/migrations/2020_08_17_234545_add_articles_table.php:
*****
    public function up()
    {
        Schema::create('articles'function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content');
            $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
            $table->foreignId('category_id')->constrained('categories')->onDelete('cascade');
            $table->timestamps();
        });
    }
*****
  1. Crear la migración para la tabla images:
    • $ php artisan make:migration add_images_table --create=images
  2. Para establecer los campos de la tabla articles modificamos el archivo database/migrations/2020_08_18_001319_add_images_table.php:
    public function up()
    {
        Schema::create('images'function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->foreignId('article_id')->constrained('articles')->onDelete('cascade');
            $table->timestamps();
        });
    }
  1. Crear la migración para la tabla tags:
    • $ php artisan make:migration add_tags_table --create=tags
  2. Para establecer los campos de la tabla articles modificamos el archivo database/migrations/2020_08_18_002117_add_tags_table.php:
*****
    public function up()
    {
        Schema::create('tags'function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

        // Articles & Tags = article & tag = article_tag
        Schema::create('article_tag', function (Blueprint $table) {
            $table->id();
            $table->foreignId('article_id')->constrained('articles')->onDelete('cascade');
            $table->foreignId('tag_id')->constrained('tags')->onDelete('cascade');
            $table->timestamps();
        });
    }
*****
  1. Ejecutar las migraciones:
    • $ php artisan migrate
  2. Creación del modelo Category:
    • $ php artisan make:model Category
    • Nota: esta acción creara el archivo app/Providers/Category.php. el cual modificaremos como se indica:
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = "categories";

    // Indicar los campos que queremos traer.
    protected $fillable = ['name'];
}
  1. Creación del modelo Article:
    • $ php artisan make:model Article
    • Nota: esta acción creara el archivo app/Providers/Article.php. el cual modificaremos como se indica:
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    protected $table = "articles";

    // Indicar los campos a mostrar por los objetos JSON.
    protected $fillable = ['title''content''user_id''category_id'];
}
  1. Creación del modelo Image:
    • $ php artisan make:model Image
    • Nota: esta acción creara el archivo app/Providers/Image.php. el cual modificaremos como se indica:
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Image extends Model
{
    protected $table = "images";

    // Indicar los campos a mostrar por los objetos JSON.
    protected $fillable = ['name''article_id'];
}
  1. Creación del modelo Tag:
    • $ php artisan make:model Tag
    • Nota: esta acción creara el archivo app/Providers/Tag.php. el cual modificaremos como se indica:
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    protected $table = "tags";

    // Indicar los campos a mostrar por los objetos JSON.
    protected $fillable = ['name'];
}

  1. Para poder hacer pruebas con nuestra base de datos, podemos hacer uso de tinker, para esto ejecutamos:
    • $ php artisan tinker
    • >>> $user = ['name' => 'Pedro Bazó', 'email' => 'bazo.pedro@gmail.com', 'password' => bcrypt('secreta')]
    • Con el paso anterior se ha guardado el arreglo en una variable llamada $user.
    • >>> \App\User::create($user);
    • Con este paso agregamos la variable $user a la tabla usuarios de MySQL.
  1. Para establecer una relación uno a muchos entre Category - Articles modificamos el modelo app/Providers/Category.php por un lado y el modelo app/Providers/Article.php por otro lado:
app/Providers/Category.php:
*****
    protected $fillable = ['name'];

    public function articles(){
        return $this->hasMany('App\Article');
    }
}
app/Providers/Article.php:
*****
    protected $fillable = ['title''content''user_id''category_id'];

    public function category(){
        return $this->belongsTo('App\Category');
    }
}
  1. Para establecer una relación uno a muchos entre User Articles modificamos el modelo app/Providers/User.php por un lado y el modelo app/Providers/Article.php por otro lado:
app/Providers/User.php:
*****
    protected $hidden = [
        'password''remember_token',
    ];

    public function articles(){
        return $this->hasMany('App\Article');
    }
*****
app/Providers/Article.php:
*****
    public function category(){
        return $this->belongsTo('App\Category');
    }

    public function user(){
        return $this->belongsTo('App\User');
    }
}
  1. Para establecer una relación uno a muchos entre Article Images modificamos el modelo app/Providers/Image.php por un lado y el modelo app/Providers/Article.php por otro lado:
app/Providers/Article.php:
*****
    public function user(){
        return $this->belongsTo('App\User');
    }

    public function images(){
        return $this->hasMany('App\Image');
    }
}
app/Providers/Image.php:
*****
    protected $fillable = ['name''article_id'];

    public function article(){
        return $this->belongsTo('App\Articles');
    }
}
  1. Para establecer una relación muchos a muchos entre Articles Tags modificamos el modelo app/Providers/Article.php por un lado y el modelo app/Providers/Tag.php por otro lado:
app/Providers/Article.php:
*****
    public function images(){
        return $this->hasMany('App\Image');
    }

    public function tags(){
        return $this->belongsToMany('App\Tag');
    }
}
app/Providers/Tag.php:
*****
    protected $fillable = ['name'];

    public function articles(){
        return $this->belongsToMany('App\Article');
    }
}
  1. En terminal:
    • $ php artisan tinker
    • >>> $category = new App\Category();
    • >>> $category->name = "Noticias";
    • >>> $category->save();
    • >>> $user = new App\User;
    • >>> $user->name = "Carlos Fernandes";
    • >>> $user->email = "carlos.fernandes@gmail.com";
    • >>> $user->password = bcrypt('carlos');
    • >>> $user->save();
    • >>> $article = new App\Article();
    • >>> $article->title = "Noticia de ultima hora";
    • >>> $article->content = "Contenido de la noticia";
    • >>> $article->category_id = 1;
    • >>> $article->user_id = 2;
    • >>> $article->save();
    • >>> $tag = new App\Tag();
    • >>> $tag->name = "Sucesos"
    • >>> $tag->save();
    • >>> $article->tags()->attach(1);
  1. Pare crear un ruta tipo get, modificamos el archivo de rutas routes/web.php:
zxsas
  1. sss

Comentarios

Entradas más populares de este blog

Ruta hacia el desarrollador web full stack en Soluciones++

Soluciones++ para VBA