Los ORM son una pieza clave para conectar nuestras bases de datos, las cuales constan de tablas, filas y columnas, con los modelos de nuestra aplicación, los cuales constan de clases, objetos y propiedades. Laravel incluye un ORM llamado Eloquent y en este video daremos nuestros primeros pasos con esta poderosa herramienta.

Mira el código en GitHub: actual, resultado, comparación.

Para generar un modelo podemos usar el siguiente comando desde la consola:

php artisan make:model NombreDelModeloAqui

Por defecto, Laravel 10 genera esta clase en el directorio app/Models de nuestra aplicación.

Obtener registros utilizando Eloquent ORM

De vuelta a routes/web.php podemos obtener las notas usando nuestro modelo de notas de esta forma:

<?php

// No olvides importar el modelo al principio del archivo.
use App\Models\Note;

// Ahora dentro de tus rutas puedes utilizar:

// Para obtener todas las notas de la tabla notes
$notes = Note::all();

// Para construir una consulta más avanzada usando Eloquent:
$notes = Note::query()
  //->where(...)
  //->orderBy(...)
  ->get()
;

// El llamado a query es opcional, puesto que Eloquent usa métodos mágicos puedes omitirlo, por ejemplo:
$notes = Note::where(...)->get(); // es equivalente a Note::query()->where(...)->get();

// Para obtener la nota que corresponda con el ID dado 
// (o null si no es encontrada).
$note = Note::find($id);

Puedes «unir» el constructor de consultas con Eloquent para crear consultas muy poderosas.

Convenciones de nombres de modelos y tablas

Eloquent utiliza una serie de convenciones para ahorrarnos el esfuerzo de tener que especificar cada nombre de tabla, llaves primarias o foráneas, etc.

Por ejemplo, la convención para el nombre del modelo es que cada palabra comience con una letra mayúscula y el nombre del modelo esté en singular, por ejemplo «Note» o «NoteCategory».

La convención para los nombres de las tablas es colocarlas en plural (en inglés), todo en minúsculas y cada palabra dividida por un guión bajo, por ejemplo «notes» o «note_categories». (Nota que en inglés solo se pluraliza la última palabra).

Por supuesto, si tus tablas y/o modelos no siguen estas convenciones, puedes definir el nombre de la tabla manualmente desde el modelo:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Note extends Model
{
    protected $table = 'mi_tabla_de_notas';
}

Aquí tienes algunos ejemplos adicionales:

  • Modelo: User. Tabla users
  • Modelo: Post. Tabla posts
  • Modelo: UserProfile. Tabla: user_profiles
  • Modelo: Person. Tabla: people

Eloquent y el constructor de consultas

Una ventaja adicional del ORM Eloquent es que -partiendo de cualquier modelo- podemos comenzar a construir consultas como aprendimos en la lección anterior, por ejemplo:

<?php

// Puedes escribir:
Note::query()
   ->where('id', $id)
   ->first()
;

// O también:
Note::where('id', $id)->first();

// En vez de:
DB::table('notes')->where('id', $id)->first();

El resultado será similar en ambos casos, sin embargo, al trabajar con un modelo, los objetos retornados serán instancias de dicho modelo en vez de instancias de la clase genérica de PHP.

Como vimos en el video, obtener objetos de clases específicas nos ayuda a modelar nuestra aplicación, ya que podemos agregar métodos personalizados a nuestros modelos.

Recuerda que puedes depurar tu aplicación rápidamente llamando a las funciones dd o ddd.

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Desarrollo de rutas y vistas dinámicas con el constructor de consultas en Laravel 10 Lección siguiente Creación de registros con Eloquent ORM en Laravel 10