Herramientas de usuario

Herramientas del sitio


proyectos:registro_comidas

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
proyectos:registro_comidas [2025/03/30 17:14] – [Comidas] tempwinproyectos:registro_comidas [2025/03/30 18:54] (actual) – [Migración] tempwin
Línea 13: Línea 13:
  
 ===== Estructura de base de datos ===== ===== Estructura de base de datos =====
 +
 +==== Tipos de comida ====
 +
 +  * id
 +  * nombre
 +  * slug
 +  * descripción
  
 ==== Comidas ==== ==== Comidas ====
Línea 72: Línea 79:
 </WRAP> </WRAP>
  
 +===== Tipos de comida =====
 +
 +Según el momento del día:
 +
 +  * Desayuno
 +  * Comida
 +  * Cena
 +  * Tentempié / picoteo / snack
 +
 +==== Migración ====
 +
 +<code>
 +php artisan make:migration create_meal_types_table
 +</code>
 +
 +Contenido del fichero ''database/migrations/2025_03_30_164255_create_meal_types_table.php'':
 +
 +<code php>
 +<?php
 +
 +use Illuminate\Database\Migrations\Migration;
 +use Illuminate\Database\Schema\Blueprint;
 +use Illuminate\Support\Facades\Schema;
 +
 +return new class extends Migration
 +{
 +    /**
 +     * Run the migrations.
 +     */
 +    public function up(): void
 +    {
 +        Schema::create('meal_types', function (Blueprint $table) {
 +            $table->id();
 +            $table->string('name');
 +            $table->string('slug')->unique();
 +            $table->text('description')->nullable();
 +            $table->timestamps();
 +        });
 +    }
 +
 +    /**
 +     * Reverse the migrations.
 +     */
 +    public function down(): void
 +    {
 +        Schema::dropIfExists('meal_types');
 +    }
 +};
 +
 +</code>
 +
 +==== Modelo ====
 +
 +Lo creamos con: 
 +
 +<code>
 +php artisan make:model MealType 
 +</code>
 +
 +Contenido del fichero generado ''app/Models/MealType.php'':
 +
 +<code php>
 +<?php
 +
 +namespace App\Models;
 +
 +use Illuminate\Database\Eloquent\Model;
 +
 +class MealType extends Model
 +{
 +    //
 +}
 +
 +</code>
 ===== Categorías ===== ===== Categorías =====
  
Línea 77: Línea 158:
  
 <code> <code>
-php atisan make:migration create_categories_table+php artisan make:migration create_categories_table
 </code> </code>
  
Línea 197: Línea 278:
  
 ===== Comidas ===== ===== Comidas =====
 +
 +==== Migración ====
  
 **Migración** para la tabla de las **comidas**: **Migración** para la tabla de las **comidas**:
Línea 208: Línea 291:
 <code php> <code php>
 <?php <?php
- +
 use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
- +
 return new class extends Migration return new class extends Migration
 { {
Línea 220: Línea 303:
     public function up(): void     public function up(): void
     {     {
-        Schema::create('categories', function (Blueprint $table) {+        Schema::create('meals', function (Blueprint $table) {
             $table->id();             $table->id();
-            $table->string('name')->unique(); +            $table->foreignId('user_id')->nullable()->constrained()->cascadeOnDelete(); 
-            $table->string('color')->nullable();+            $table->string('name')
 +            $table->text('description')->nullable(); 
 +            $table->dateTime('date_time'); 
 +            $table->integer('calories')->nullable(); 
 +            $table->enum('meal_type', ['desayuno', 'comida', 'cena', 'tentempié']); 
 +            $table->foreignId('category_id')->nullable()->constrained(); 
 +            $table->enum('location_type', ['casa', 'fuera'])->default('casa');
             $table->timestamps();             $table->timestamps();
         });         });
     }     }
- +
     /**     /**
      * Reverse the migrations.      * Reverse the migrations.
Línea 233: Línea 322:
     public function down(): void     public function down(): void
     {     {
-        Schema::dropIfExists('categories');+        Schema::dropIfExists('meals');
     }     }
-}+};
 </code> </code>
  
-Modelo para las categorías (app/Models/Category.php):+==== Modelo ====
  
 +Modelo para las categorías (''app/Models/Meal.php''):
 +
 +<code php>
 <?php <?php
- +
 namespace App\Models; namespace App\Models;
- +
 use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
-  +use Illuminate\Database\Eloquent\Relations\BelongsTo; 
-  +use Illuminate\Database\Eloquent\Relations\BelongsToMany; 
-class Category extends Model+ 
 +class Meal extends Model
 { {
     use HasFactory;     use HasFactory;
-  + 
-    protected $fillable = ['name', 'color']; +    protected $fillable = [ 
-  +        'name', 
-    public function meals()+        'description'
 +        'date_time', 
 +        'meal_type', 
 +        'user_id' 
 +    ]; 
 + 
 +    protected $casts = [ 
 +        'date_time' => 'datetime', 
 +    ]; 
 + 
 +    // Relaciones 
 +    public function user(): BelongsTo
     {     {
-        return $this->hasMany(Meal::class);+        return $this->belongsTo(User::class);
     }     }
-  + 
-    public function ingredients()+    public function category(): BelongsTo
     {     {
-        return $this->hasMany(Ingredient::class);+        return $this->belongsTo(Category::class); 
 +    } 
 + 
 +    public function ingredients(): BelongsToMany 
 +    { 
 +        return $this->belongsToMany(Ingredient::class) 
 +            ->withPivot('quantity'
 +            ->withTimestamps(); 
 +    } 
 + 
 +    public function tags(): BelongsToMany 
 +    { 
 +        return $this->belongsToMany(Tag::class) 
 +            ->withTimestamps(); 
 +    } 
 + 
 +    // Accesor para el lugar 
 +    public function getLocationAttribute(): string 
 +    { 
 +        return match($this->location_type) { 
 +            'casa' => 'En casa', 
 +            'casa_familiar' => 'Casa de familiar', 
 +            'restaurante' => $this->restaurant ?? 'Restaurante', 
 +            default => 'Desconocido' 
 +        };
     }     }
 } }
 +</code>
  
-Controlador+==== Controlador ====
  
 Creamos un controlador asociado al modelo de las categorías: Creamos un controlador asociado al modelo de las categorías:
  
-php artisan make:controller CategoryController -m Category+<code> 
 +php artisan make:controller MealController -m Meal 
 +</code>
  
-Se creará el fichero app/Http/Controllers/CategoryController.php con la firma de los 7 métodos:+Se creará el fichero ''app/Http/Controllers/MealController.php'' con la firma de los 7 métodos:
  
-    index() +  * index() 
-    create() +  create() 
-    store() +  store() 
-    show() +  show() 
-    edit() +  edit() 
-    update() +  update() 
-    destroy()+  destroy()
  
-Vistas+==== Vistas ====
  
-Creamos las vistas para todos los métodos del controlador menos store(), update() y destroy():+Creamos las vistas para todos los métodos del controlador menos ''store()''''update()'' ''destroy()'':
  
-php artisan make:view categories.index+<code> 
 +php artisan make:view meals.index
  
-php artisan make:view categories.create+php artisan make:view meals.create
  
-php artisan make:view categories.show+php artisan make:view meals.show
  
-php artisan make:view categories.edit+php artisan make:view meals.edit 
 +</code>
  
-Se habrán creado los siguientes ficheros en el directorio resources/views/categories:+Se habrán creado los siguientes ficheros en el directorio ''resources/views/meals'':
  
-    index.blade.php +  * ''index.blade.php'' 
-    create.blade.php +  * ''create.blade.php'' 
-    show.blade.php +  * ''show.blade.php'' 
-    edit.blade.php+  * ''edit.blade.php''
  
-Rutas+==== Rutas ====
  
-En el fichero routes/web.php añadimos:+En el fichero ''routes/web.php'' añadimos:
  
-Route::resource('categories', CategoryController::class);+<code php> 
 +Route::resource('meals', MealController::class); 
 +</code>
  
 Podemos verificar con el siguiente comando las rutas registradas: Podemos verificar con el siguiente comando las rutas registradas:
  
 +<code>
 php artisan route:list php artisan route:list
 +</code>
  
proyectos/registro_comidas.1743347681.txt.gz · Última modificación: por tempwin