¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Eloquent ORM (Laravel)
Eloquent es un ORM (Object-Relational Mapper) incluido en Laravel para interactuar con la base de datos.
Al usar Eloquent, cada tabla de la base de datos está asociada a un model que se usa para interactuar con dicha tabla.
Generación de clases para modelos
Para generar una clase que se empleará de modelo:
php artisan make:model Product
Si añadimos la opción -m (o --migration), también se creará la migración.
Convenciones
Nombres de las tablas
Por defecto, Eloquent considerará que el nombre de la tabla al que está asociado el modelo será el nombre del modelo en snake_case y en plural.
Por ejemplo, si nuestra clase modelo es Product, la tabla será products. Si tenemos una clase modelo llamada AirTrafficController, la tabla se llamará air_traffic_controllers.
Si no seguimos esta convención, entonces debemos indicar el nombre de la tabla:
// class Product extends Model { /** * The table associated with the model. * * @var string */ protected $table = 'mis_productos';
Claves primarias
Eloquent también asuma que cada tabla tiene una columna llamada id y que es la clave primaria.
Si queremos indicar otra distinta, definimos una propiedad en el modelo:
// class Product extends Model { /** * The primary key associated with the table. * * @var string */ protected $primaryKey = 'id_producto'; }
Timestamps
Por defecto, Eloquent espera que las tablas tengan las columnas created_at y updated_at. Si no queremos que Eloquent gestione esto, debemos indicarlo en el modelo correspondiente:
// class Product extends Model { /** * Indicates if the model should be timestamped. * * @var bool */ public $timestamps = false; }
Inspeccionar modelos
php artisan model:show Flight
Obtener modelos
Una vez creado el modelo y su tabla asociada, podemos obtener información de la base de datos. Eloquent es como un potente constructor de consultas para la tabla asociada al modelo.
Por ejemplo, obtener todos los registros de productos:
use App\Models\Product; foreach (Product::all() as $product) { echo $product->name; }
Construcción de consultas
Si queremos aplicar criterios en las consultas:
$products = Product::where('active', 1) ->orderBy('name') ->take(10) ->get();
Insertar y actualizar modelos
Insertar
Para añadir un registro a la base de datos, creamos una instancia del modelo y establecemos los atributos del modelo. Finalmente, llamamos al método save:
<?php namespace App\Http\Controllers; use App\Models\Product; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; class ProductController extends Controller { /** * Store a new product in the database. */ public function store(Request $request): RedirectResponse { // Validate the request... $product = new Product; $product->name = $request->name; $product->save(); return redirect('/products'); } }
Como alternativa, también podríamos usar el método create para añadir el registro en una única sentencia PHP:
use App\Models\Flight; $product = Product::create([ 'name' => 'Mesa camilla', ]);
Sin embargo, para poder usar el método create, necesitaremos indicar la propiedad fillable o guarded en la clase del modelo. Estas propiedades son necesarias para proteger los modelos contra vulnerabilidades por asignaciones masivas.
Actualizar
El método save también se puede usar para actualizar. Primero debemos recuperar el registro /modelo que queremos modificar:
use App\Models\Product; $product = Product::find(1); $product->name = 'Silla de madera'; $product->save();
Eliminar
Para eliminar un modelo, llamamos a su método delete:
use App\Models\Product; $product = Product::find(1); $product->delete();
Si conocemos la clave primaria del modelo que queremos eliminar, no es necesario obtenerlo primero, bastaría con llamar a destroy:
Flight::destroy(1);
Consultas SQL generadas
Cuando en Laravel usamos lo siguiente:
User::get()
Eloquent lo traduce a:
SELECT * FROM users
