Creación de un blog con Laravel en Soluciones++
Creación de un blog personal con Laravel
- Nota: Proyecto inspirado en el curso de Laravel de códigofacilito.com.
- 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.
- Crear base de datos MySQL con el nombre blog.
- 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
- 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();
});
}
*****
- Para crear una nueva migración para la tabla categories:
- $ php artisan make:migration add_categories_table --create=categories
- 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();
});
}
*****
- Para ejecutar las migraciones:
- $ php artisan migrate
- Crear la migración para la tabla articles:
- $ php artisan make:migration add_articles_table --create=articles
- 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();
});
}
*****
- Crear la migración para la tabla images:
- $ php artisan make:migration add_images_table --create=images
- 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();
});
}
- Crear la migración para la tabla tags:
- $ php artisan make:migration add_tags_table --create=tags
- 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();
});
}
*****- Ejecutar las migraciones:
- $ php artisan migrate
- 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'];
}
- 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'];
}
- 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'];
}
- 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'];
}
- 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.
- 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:
*****
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');
}
}
- 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:
*****
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');
}
}
- 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:
*****
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');
}
}
- 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:
*****
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');
}
}
- 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);
- Pare crear un ruta tipo get, modificamos el archivo de rutas routes/web.php:
- sss
Comentarios
Publicar un comentario