Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |not checked

Eloquent – el ORM de Laravel

Puntos que se verán a lo largo del articulo:

¿ 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 proyecto
php 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.

la tabla clientes

Creare las rutas que necistare en routes/web.php, ten en cuenta la version de tu laravel

versiones anteriores a laravel 8 routes/web.php
Route::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.php
use 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.php
public 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.php
public 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.php
public 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.php
public 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.

app/Http/Controllers/ClientController.php[fragment]
public function update(){
        $cliente = \App\Cliente::find(1);
        $cliente->nombre    = "Marcos";
        $cliente->save();
    }

otra forma de hacer esto es:

app/Http/Controllers/ClientController.php[fragment]
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.

app/Http/Controllers/ClientController.php
public function delete(){
    $cliente = \App\Cliente::find(1);
    $cliente->delete();
}

Referencias:

si crees que hay que agregarle algo mas a esta introducción a eloquent déjalo en tu comentario. Gracias

Category: laravel
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category