informatica:programacion:php:frameworks:laravel:convenciones
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: <code php> class User extends Model { protected $table = 'mis_usuarios'; // Sobrescribe la convención } </code> ==== 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 ^ |UseryRole|role_user| |PostyTag|post_tag| ==== Claves primarias ==== Por defecto, Laravel espera una columna llamadaidcomo clave primaria. Si nuestra tabla usa otro nombre como clave primaria, hay que definir una propiedad protected$primaryKeyen el modelo correspondiente: <code php> class User extends Model { protected $primaryKey = 'user_id'; } </code> ==== Claves foráneas ==== Laravel asume que la clave foránea se llamanombre_modelo_en_singular_iden snake_case. Por ejemplo, si unCommentpertenece a unPost, la clave foránea serápost_idSi queremos personalizarlo, podemos hacerlo en las relaciones: <code php> class Comment extends Model { public function post() { return $this→belongsTo(Post::class, 'mi_post_id'); // Clave foránea personalizada } } </code> ==== Timestamps automáticos ==== Laravel espera columnascreated_atyupdated_aten tus tablas para gestionar fechas automáticamente. Si no las usas, podemos indicarlo en el modelo: <code php> class User extends Model { public $timestamps = false; } </code> ==== 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 columnapublished_atcorresponde a la propiedad del modeloPost$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.
informatica/programacion/php/frameworks/laravel/convenciones.txt · Última modificación: por tempwin
