Tabla de Contenidos
Convenciones utilizadas en Laravel
Laravel prioriza “convención sobre configuración”, así que seguir sus estándares te ahorrará tiempo.
Estructura de directorios
app/Models: modelosresources/views: vistas.app/Http/Controllers: controladores.database/migrations: migraciones.routes: definición de rutas.config: archivos de configuración.
Nombrado de ficheros
- Modelos: Singular y PascalCase (ej:
User,ProductCategory). - Controladores: Sufijo Controller (ej:
UserController). - Migraciones:
create_users_table→ genera tablausers.
Bases de datos
Nombres de tablas
Por defecto, Laravel asume que el nombre de la tabla corresponde al plural en inglés del modelo asociado, en snake_case (minúsculas y separado por guiones bajos) si tiene más de una palabra.
Ejemplos:
| Modelo | Tabla |
|---|---|
User | users |
PostComment | post_comments |
ProductCategory | product_categories |
Si nuestras tablas no siguen esta regla, podemos definir el nombre manualmente en el modelo estableciendo una propiedad privada con el nombre de la tabla:
class User extends Model { protected $table = 'mis_usuarios'; // Sobrescribe la convención }
Tablas Pivote
Para relaciones muchos a muchos (Many-to-Many), Laravel espera una tabla intermedia (pivote) con los nombres de las dos tablas relacionadas en orden alfabético, en singular y unidos por un guion bajo.
Por ejemplo:
| Modelos | Tabla pivote |
|---|---|
User y Role | role_user |
Post y Tag | post_tag |
Claves primarias
Por defecto, Laravel espera una columna llamada id como clave primaria.
Si nuestra tabla usa otro nombre como clave primaria, hay que definir una propiedad protected $primaryKey en el modelo correspondiente:
class User extends Model { protected $primaryKey = 'user_id'; }
Claves foráneas
Laravel asume que la clave foránea se llama nombre_modelo_en_singular_id en snake_case.
Por ejemplo, si un Comment pertenece a un Post, la clave foránea será post_id
Si queremos personalizarlo, podemos hacerlo en las relaciones:
class Comment extends Model { public function post() { return $this->belongsTo(Post::class, 'mi_post_id'); // Clave foránea personalizada } }
Timestamps automáticos
Laravel espera columnas created_at y updated_at en tus tablas para gestionar fechas automáticamente.
Si no las usas, podemos indicarlo en el modelo:
class User extends Model { public $timestamps = false; }
Columnas en Snake Case
Todas las columnas de la base de datos deben definirse en snake_case para que Eloquent las mapee correctamente a propiedades en camelCase en los modelos.
Por ejemplo, la columna published_at corresponde a la propiedad del modelo Post $post→published_at.
¿Qué pasa si no sigo las convenciones?
Puedes personalizar todo, pero tendrás que escribir más código (ej: definir manualmente claves foráneas, nombres de tablas, etc.). Seguir las convenciones ahorra tiempo y evita errores.
