OCOBO modelos y migraciones
Modelos (Eloquent)
Ubicación y nombres
- •Ubicación:
app/Models/{Modulo}/(oapp/Models/si es transversal). - •Clases: PascalCase.
- •Si la tabla no coincide con convención de Laravel, definir
protected $table.
Checklist de modelo
- •
protected $fillable = [...]con campos que se asignan porcreate()/fill(). - •
protected $casts = [...]cuando aplique (fechas, boolean, etc.). - •Relaciones explícitas (
belongsTo,hasMany,belongsToMany) con llaves foráneas reales del esquema. - •Scopes simples cuando existan flags (ej.
scopeActivo()/scopeInactivo()). - •Si el modelo maneja archivos: usar
ArchivoHelpery exponer método genéricogetArchivoUrl($campo, $disk).
Plantilla breve (modelo con archivo)
php
<?php
namespace App\Models\Modulo;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use App\Helpers\ArchivoHelper;
class Recurso extends Model
{
use HasFactory;
protected $table = 'tabla_real';
protected $fillable = [
// ...
'archivo',
];
public function getArchivoUrl(string $campo, string $disk): ?string
{
return ArchivoHelper::obtenerUrl($this->{$campo} ?? null, $disk);
}
}
Migraciones
Estándar del repo
- •Archivo en
database/migrations/con timestamp. - •Usar clase anónima:
- •
return new class extends Migration { ... };
- •
- •Incluir
up(): voidydown(): void. - •Agregar:
- •claves foráneas (
foreign(...)) - •índices (especialmente sobre FKs y filtros)
- •unique constraints si evita duplicados
- •comments si ya es el patrón de la tabla
- •claves foráneas (
Plantilla breve (create table)
php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('tabla', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->boolean('estado')->default(true);
$table->timestamps();
$table->index(['user_id', 'estado']);
});
}
public function down(): void
{
Schema::dropIfExists('tabla');
}
};