Herramientas de usuario

Herramientas del sitio


informatica:programacion:php:frameworks:laravel:convenciones

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
informatica:programacion:php:frameworks:laravel:convenciones [2025/03/09 10:28] tempwininformatica:programacion:php:frameworks:laravel:convenciones [2025/03/09 10:50] (actual) – [Columnas en Snake Case] tempwin
Línea 3: Línea 3:
 [[informatica:programacion:php:frameworks:laravel|Laravel]] prioriza "convención sobre configuración", así que seguir sus estándares te ahorrará tiempo.  [[informatica:programacion:php:frameworks:laravel|Laravel]] prioriza "convención sobre configuración", así que seguir sus estándares te ahorrará tiempo. 
  
 +===== Estructura de directorios =====
  
 +  * ''app/Models'': modelos
 +  * ''resources/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 tabla ''users''.
 +
 +===== 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  ^
 +| ''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:
 +
 +<code php>
 +class User extends Model {
 +    protected $primaryKey = 'user_id'; 
 +}
 +</code>
 +
 +==== 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:
 +
 +<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 columnas ''created_at'' y ''updated_at'' en 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 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.
informatica/programacion/php/frameworks/laravel/convenciones.1741512511.txt.gz · Última modificación: por tempwin