Eloquent – el ORM de Laravel
Puntos que se verán a lo largo del articulo:
- Que es un ORM
- Eloquent
- Utilizando eloquent
- Seleccionar datos
- Insertar datos
- Borrar datos
- Modificar datos
¿ Que es un ORM ?
Es un patrón de diseño creado con el objetivo de usar objetos para la representación de los datos y sus relaciones(relaciones entre tablas) en una base de datos relacional
Eloquent
El uso de el ORM(Object–relational mapper) de Laravel comienza desde la creación de nuestro modelo, se que en ningún lado lo dice tan directo en la documentación oficial pero es de esta manera. Sin un modelo Laravel no va a poder usar Eloquent.
Utilizando Eloquent
Para utilizar eloquent primero deberá crearse un modelo, los modelos son la forma mas facil de relacionarnos con nuestra base de datos.( vea modelos en laravel)
Supongamos que ya tenemos un modelo Cliente, crearee el modelo cliente para el ejemplo usando la consola
carpeta del proyectophp artisan make:model Cliente
Creare una tabla clientes en la base de datos (example). con los siguientes tipos de datos:
- id(autoincremental int)
- nombre( string)
- apellido(string)
- telefono(string 17) – 15 caracteres es el máximo que usan los teléfonos así que con 17 esta bien.
- direccion(string)
Si no es que no les quiera poner tilde simplemente es así como se llamaran las columnas en la base de datos. En este caso que es un ejemplo yo lo he echo con phpmyadmin pero es conveniente que cree sus tablas atravez de migraciones (migraciones en laravel)
ahora deberíamos decirle a nuestro modelo que nuestra tabla clientes de la base de datos no tiene timestamps y que columna es guarded (en este caso id).
A Recordar: si usa guarded no use fillable y viceversa.
app/Client.php<?php namespace App; use Illuminate\Database\Eloquent\Model; class Cliente extends Model { public $timestamps = false; protected $guarded = ["id"]; }
Insertare algo de datos en la base de datos para tener con que hacer los ejemplos.
Creare las rutas que necistare en routes/web.php, ten en cuenta la version de tu laravel
versiones anteriores a laravel 8 routes/web.phpRoute::get('cliente/save',"ClienteController@save"); Route::get('cliente/show',"ClienteController@show"); Route::get('cliente/update',"ClienteController@update"); Route::get('cliente/delete',"ClienteController@delete"); Route::get('cliente/update2',"ClienteController@update2");
en caso de que estes usando laravel 8 o superior :
Laravel 8 o superior routes/web.phpuse App\Http\Controllers\ClienteController;// ponlo junto a las otras importacioens Route::get('cliente/save',[ClienteController::class,'save']); Route::get('cliente/show',[ClienteController::class,'show']); Route::get('cliente/update',[ClienteController::class,'update']); Route::get('cliente/delete',[ClienteController::class,'delete']); Route::get('cliente/update2',[ClienteController::class,'update2']);
Seleccionar datos
Usaremos eloquent desde un controlador, para ello crearé el controlador ClienteController.
Eloquent tiene una cantidad de métodos que usted puede usar (Eloquent collections). En el siguiente ejemplo usaremos algunos para seleccionar datos en nuestra tabla clientes.
Al usar all() traeremos todos los clientes que tenemos, este método no es muy usado, pero es bueno que sepa que existe, generalmente se usa paginate() para realizar paginaciones.
app/Http/Controllers/ClientController.phppublic function show() { $clientes = \App\Cliente::all(); foreach($clientes as $cliente){ echo $cliente->nombre."</br>"; } }
En esta función show estoy mostrando todos los nombres de mis clientes.
Ahora veamos como mostrar el cliente que yo quiero. El cliente con id = 1 modificaremos el metodo show para que quede de esta manera.
app/Http/Controllers/ClientController.phppublic function show() { $cliente= \App\Cliente::find(1); echo "$cliente->nombre<br>"; echo "$cliente->apellido<br>"; echo "$cliente->telefono<br>"; echo "$cliente->direccion<br>"; }
A partir de este punto voy a hardcodear un poco. Ya que estamos viendo eloquent y no tiene sentido que explique mucho mas que lo que viene a explicar. Si desea salir del paso rapido vea crear formulario en laravel
puede chequear su phpmyadmin o su base de datos para ver los resultados despues de ejecutar las consultas.
Insertar datos
Veamos como insertar datos en nuestra tabla con Eloquent.
Para insertar datos con eloquent debemos usar nuestro modelo esto lo podemos hacer incluyéndolo en nuestro controlador con use o llamarlo con App\Cliente.
Veremos como hacerlo en los siguientes ejemplos:
app/Http/Controllers/ClientController.phppublic function save(){ $cliente = new \App\Cliente; $cliente->nombre = "Jhon"; $cliente->apellido = "Kremer"; $cliente->telefono = "099876532"; $cliente->direccion = "Peru 1978"; $cliente->save(); }
de esta manera creamos un metodo para agregar el usuario. Otra manera es agregando use \App\Cliente; de esta manera podemos cambiar la linea
$cliente = new \App\Cliente;
por
$cliente = new Cliente;
¿que le parece mas claro?
Modificar datos
Tenemos 2 posibles modificaciones que podemos querer hacer
- 1 seria seleccionar el cliente modificarlo y guardarlo.
- y la otra es querer modificar todos nuestros clientes
A continuación vemos la primera opción. Seleccionamos nuestro cliente con find(1), este es el cliente con la id = 1.
app/Http/Controllers/ClientController.phppublic function update(){ $cliente = \App\Cliente::find(1); $cliente->nombre = "Marcos"; $cliente->apellido = "Kremer"; $cliente->telefono = "099876532"; $cliente->direccion = "Peru 1978"; $cliente->save(); }
de echo no es necesario cargar todo los datos en el update esto tambien funcionaria ya que solo queremos cambiarle el nombre.
public function update(){ $cliente = \App\Cliente::find(1); $cliente->nombre = "Marcos"; $cliente->save(); }
otra forma de hacer esto es:
public function update2(){ $cliente = \App\Cliente::where("id", 1) ->update([ 'nombre' => "Marcos", ]); }
Modificar datos en masa
Supongamos que tenemos una gran cantidad de clientes con la dirección «peru 1978» y por alguna razón se cambia el numero para cambiar el nro de todos los contactos que están en este edificio tendríamos que hacer lo siguiente.
app/Http/Controllers/ClientController.php[fragment]public function update3(){ $cliente = \App\Cliente::where("direccion", "peru 1978") ->update([ 'direccion' => "peru 1988", ]); }
recuerde que al usar $guarded en una columna esto no funcionara, por ejemplo si tratamos de cambiar el id no nos dejara por que no puede assignarsele valor en masa. En este caso id es primary key así que tampoco seria cambiable porque es unique.
Borrar datos
Para borrar datos es muy sencillo, seleccionamos el usuario que queremos y llamamos a delete es todo lo que se necesita.
public function delete(){ $cliente = \App\Cliente::find(1); $cliente->delete(); }
Referencias:
- Libro: Laravel up and running by Matt
- laravel.com
- laracast.com
si crees que hay que agregarle algo mas a esta introducción a eloquent déjalo en tu comentario. Gracias