¡Esta es una revisión vieja del documento!
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 } }
