Usuario:ManuelRomero/Laravel/eloquent

De WikiEducator
Saltar a: navegación, buscar



Eloquent

  • Eloquent es un modelo objeto-Relacional ORM que se implementa en laravel.
  • De esta forma se va a establecer una clase (el modelo) nos va a permitir trabajar de forma sencilla y muy productiva con una base de datos.
  • El modelo (la clase) se va a relacionar con una tabla en la bd.
Icon present.gif
Tip:
  • Para utilizarlo cada tabla de la base de datos con la que trabajamos va a tener un modelo creado en nuestro proyecto .


  • Los modelos que cremos con ~artisan se ubicaran en la carpeta de nuestro proyecto app/Http


Icon activity.jpg
Crear un modelo (Alumno)
php artisan make:model Alumno
  • Crea una clase llamada Alumno en el dir app



  • Como los diferentes comandos, tenemos una serie de opciones en su creación que podemos ver con la opción -h


Icon activity.jpg
Crear un modelo (Alumno)
 php artisan .h make:model






Icon activity.jpg

Crear un modelo (Alumno) con #migración, #seeder, #factory y #controlador resource

php artisan make:model Alumno --all

o

php artisan make:model Alumno -a






Icon activity.jpg
Laravel modelo-tabla
ORM realciona un modelo con una tabla
  • Por defecto se asumen una serie de valores que se pueden modificar en el modelo
  • Para ello habría que establecer valores a otros atributos en la clase

(Comment.gif: Ponemos el ejemplo de haber creado un modelo llamado User)


<?php
 
namespace App;
 
use Illuminate\Database\Eloquent\Model;
 
class User extends Model
{
 
//Nombre de la tabla 
//por defecto el nombre del modelo en plural
//y minúscula
$protected $table = 'nombre_tabla'; //por defecto users,
 
 
//Clave principal
//Por defecto id de tipo int autoincrement  
$primaryKey="otro_nombre"; // por defecto id
$incrementing=false; //por defecto true
$keyType="string";// por defecto int
 
//Timestamps
//Por defecto espera gestinar dos campos
//created_at y updated_at
//Información temporar de cuándo modificación de valores
//Si no van a existir en la tabla
$timestamps = false;//Por defecto true
 
//Cambiar el nombre de los campos de timestamps
//por defecto created_aty updated_at
const CREATED_AT = 'fecha_creacion';  //por defecto created_at
const UPDATED_AT = 'ultima_actualizacion';//por defecto updated_at
 
//Formato de fechas
//Si quieres especificar uno concreto
protected $dateFormat = 'U';
 
//Contexión a la BD
//por defecto la establecida en el fichero de configuración
protected $connection = 'otra_conexión';
}



Creando las rutas

  • Cuando queremos gestionar una tabla de forma completa (CRUD) debemos atender a eventos con diferentes significados
  1. Un submit para agregar un registro (C)
  2. Un submit para agregar Editar un registro y otro para guardarlo(RU)
  3. Un submit para eliminar un registro (D)
  • Esto puede generar un pequeño caos en nuestro web.php, especialmente si tenemos varias tablas (modelos) creados
  • Para ello laravel utiliza lo que llama Resources
  • Especificaremos en el fichero web.php directamente el uso de un recurso


Route::resource("cliente", App\Http\Controllers\AlumnoController::class);
  • Y de esta forma ya tenemos disponibles todos las rutas para trabajar de forma RestFull con nuestra clase
  • Un RestFull, especifica que podremos realizar todas las acciones (lógicamente escribiendo el código) en los métodos correspondinetes al controlador ante las solicitudes.
  • Pero ya tenemos establecidas De qué forma se va a solicitar el recuros y qué método va a invocarse

GET|HEAD Cliente ............................................................................. Cliente.index › AlumnoController@index

 POST            Cliente ............................................................................. Cliente.store › AlumnoController@store
 GET|HEAD        Cliente/create .................................................................... Cliente.create › AlumnoController@create
 GET|HEAD        Cliente/{Cliente} ..................................................................... Cliente.show › AlumnoController@show
 PUT|PATCH       Cliente/{Cliente} ................................................................. Cliente.update › AlumnoController@update
 DELETE          Cliente/{Cliente} ............................................................... Cliente.destroy › AlumnoController@destroy
 GET|HEAD        Cliente/{Cliente}/edit ................................................................ Cliente.edit › AlumnoController@edit


/cliente|cliente| index|
/cliente|cliente| store|


Interactuando con la tabla

  • Para obtener todos los registros de la tabla all()
$usuarios = Ususario::all();
foreach( $usuarios as $usuario){
    echo $usuario->nombre;
}

Sería equivalente a hacer

Select * from usuarios;
  • Obetener un solo registro (necesitamos para ello usar compos únicos como $id
$id=58;
$usuario = Ususario::find($id);
  • Obtener solo algún campo de la tabla
$id=58;
$usuario = Ususario::find($id, array('nombre'));
echo "Usuario encontrado ". $usuario->nombre;
8
  • Obetener registros que cumplan una condicion where(..)->get()
$usuarios = Ususario::where('edad','>',18)->get();
foreach( $usuarios as $usuario){
    echo $usuario->nombre;
}
  • Podemos usar una serie de métodos mágicos del tipo whereNombreColumna
//Todos los usuarios de 20 años
$usuarios = Ususario::whereEdad(20)->get();
foreach( $usuarios as $usuario){
    echo $usuario->nombre;
}
Insertar registros save()
  • Para insertar registros simplemente asignaremos valor a cada campo del modelo y usaremos el método save
$usuario = new Ususario;
 
$user->nombre = 'Maria';
$user->edad = 30;
$user->direccion = 'Casa de Maria';
$user->save();
Borrar registros delete()
  • Para borrar un lo localizamos y usamos el método delete()

$user = User::find(1);

$user->delete();

$usuario = Usuario::find(1);//Localizamos el usuario con id 1
 
$user->delete();

Mostrando mensaje de acciones realizadas

  • En el controlador donde se haya creado el registro
public function  xxxxxx{
\Session::flash("mensaje_accion", "Se ha creado el registro");
 
}


<div class="container>
@if (Session::has("mensaje_accion"))
<button type="button" class="close" data-dismisss="alert" aria-hidden="true">&times;</button>
{{Session::get("mensaje_accion")}}
</div>

Pedir confirmación de acción de borrado