Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/eloquent»
De WikiEducator
(→Eloquent) |
|||
(12 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
{{:Usuario:ManuelRomero/micursos/Laravel/baseDatos/nav}} | {{:Usuario:ManuelRomero/micursos/Laravel/baseDatos/nav}} | ||
+ | {{TOC}} | ||
+ | <div class=parrafo> | ||
===Eloquent=== | ===Eloquent=== | ||
*Eloquent es un '''modelo objeto-Relacional''' '''''ORM''''' que se implementa en laravel. | *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. |
− | + | {{Tip| | |
− | *Los modelos | + | *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/model''''' | ||
{{MRM_Actividad|Title=Crear un modelo (Alumno)| | {{MRM_Actividad|Title=Crear un modelo (Alumno)| | ||
php artisan make:model Alumno | php artisan make:model Alumno | ||
*Crea una clase llamada Alumno en el dir '''''app''''' | *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''''' | ||
+ | <br /> | ||
+ | {{MRM_Actividad|Title=Crear un modelo (Alumno)| | ||
+ | <source lang=bash> | ||
+ | php artisan -h make:model | ||
+ | </source> | ||
}} | }} | ||
− | {{ | + | |
− | php artisan make:model Alumno -- | + | |
+ | {{Actividad|Title=Crear un modelo (Alumno) con #migración, #seeder, #factory y #controlador resource | | ||
+ | php artisan make:model Alumno --all | ||
o | o | ||
− | php artisan make:model Alumno - | + | php artisan make:model Alumno -a |
}} | }} | ||
Línea 34: | Línea 47: | ||
//por defecto el nombre del modelo en plural | //por defecto el nombre del modelo en plural | ||
//y minúscula | //y minúscula | ||
− | + | protected $table = 'nombre_tabla'; //por defecto users, | |
//Clave principal | //Clave principal | ||
//Por defecto id de tipo int autoincrement | //Por defecto id de tipo int autoincrement | ||
− | $primaryKey="otro_nombre"; // por defecto id | + | protected $primaryKey="otro_nombre"; // por defecto id |
− | $incrementing=false; //por defecto true | + | public $incrementing=false; //por defecto true |
− | $keyType="string";// por defecto int | + | protected $keyType="string";// por defecto int |
//Timestamps | //Timestamps | ||
Línea 48: | Línea 61: | ||
//Información temporar de cuándo modificación de valores | //Información temporar de cuándo modificación de valores | ||
//Si no van a existir en la tabla | //Si no van a existir en la tabla | ||
− | $timestamps = false;//Por defecto true | + | public $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'; | ||
} | } | ||
+ | </source> | ||
+ | }} | ||
+ | </div> | ||
+ | <div class=parrafo> | ||
+ | ===Creando las rutas=== | ||
+ | *Cuando queremos gestionar una tabla de forma completa (CRUD) debemos atender a eventos con diferentes significados | ||
+ | #Un submit para agregar un registro (C) | ||
+ | #Un submit para agregar Editar un registro y otro para guardarlo(RU) | ||
+ | #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 | ||
− | + | <source lang=bash> | |
+ | Route::resource("cliente", App\Http\Controllers\AlumnoController::class); | ||
</source> | </source> | ||
+ | *Y de esta forma ya tenemos disponibles todos las rutas para trabajar de forma RestFull con nuestro controlador ''''''ClienteController''''', enfocado a interactuar con la tabla '''''clientes'''''' de la BD a través del modelo '''''Cliente''''' | ||
+ | *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''''' | ||
+ | Vemos las rutas que se crean, y los métodos que se van a invocar A cont | ||
+ | GET Cliente ..................... Cliente.index index | ||
+ | POST Cliente ....... ............ Cliente.store store | ||
+ | GET Cliente/create .. ........... Cliente.create create | ||
+ | GET Cliente/{Cliente} .......... Cliente.show show | ||
+ | PUT Cliente/{Cliente} ........... Cliente.update update | ||
+ | DELETE Cliente/{Cliente} ........... Cliente.destroy destroy | ||
+ | GET Cliente/{Cliente}/edit....... Cliente.edit edit | ||
+ | <br /> | ||
− | + | {{MRM_Actividad|Title=Listar usuarios : index| | |
+ | ;Listar todos los Clientes | ||
}} | }} | ||
+ | {{MRM_Actividad|Title=Crear un nuevo cliente: create - store| | ||
+ | ;Crear un nuevo cliente | ||
+ | *1.-Mostrar un formulario para aportar los datos | ||
+ | *2.-Guardar los datos en la BD | ||
+ | *3.-Listar y mostrar todos los clientes | ||
+ | }} | ||
+ | {{MRM_Actividad|Title=Mostrar un cliente : show| | ||
+ | ;Mostrar un cliente concreto | ||
+ | *1.-Recuperar los datos de un cliente | ||
+ | *2.- Visualizarlos en una vista | ||
+ | }} | ||
+ | {{MRM_Actividad|Title=Modificar un cliente: edit - update| | ||
+ | *1.-Recuperar los datos de un cliente | ||
+ | *2.-Visualizarlos en un formulario para poder modificarlos | ||
+ | *2.-Actualizar el cliente en la BD | ||
+ | *3.-Listar y mostrar todos los clientes | ||
+ | }} | ||
+ | {{MRM_Actividad|Title=Borrar un cliente: destroy| | ||
+ | ;Borrar un cliente | ||
+ | *1.-Recuperar los datos de un cliente | ||
+ | *2.-Borrarlo en la BD | ||
+ | *3.-Listar y mostrar todos los clientes | ||
+ | }} | ||
+ | </div> | ||
− | + | <div class=parrafo> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===Interactuando con la tabla=== | ===Interactuando con la tabla=== | ||
*Para obtener todos los registros de la tabla '''''all()''''' | *Para obtener todos los registros de la tabla '''''all()''''' | ||
Línea 155: | Línea 205: | ||
</source> | </source> | ||
+ | </div> | ||
+ | |||
+ | ===Mostrando mensaje de acciones realizadas=== | ||
+ | *En el controlador donde se haya creado el registro | ||
+ | <source lang=php> | ||
+ | public function xxxxxx{ | ||
+ | \Session::flash("mensaje_accion", "Se ha creado el registro"); | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | <source lang=php> | ||
+ | <div class="container> | ||
+ | @if (Session::has("mensaje_accion")) | ||
+ | <button type="button" class="close" data-dismisss="alert" aria-hidden="true">×</button> | ||
+ | {{Session::get("mensaje_accion")}} | ||
+ | </div> | ||
+ | </source> | ||
+ | ===Pedir confirmación de acción de borrado=== |
Última revisión de 17:51 28 mar 2023
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.
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/model
- Como los diferentes comandos, tenemos una serie de opciones en su creación que podemos ver con la opción -h
Creando las rutas
- Cuando queremos gestionar una tabla de forma completa (CRUD) debemos atender a eventos con diferentes significados
- Un submit para agregar un registro (C)
- Un submit para agregar Editar un registro y otro para guardarlo(RU)
- 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 nuestro controlador 'ClienteController, enfocado a interactuar con la tabla clientes' de la BD a través del modelo Cliente
- 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
Vemos las rutas que se crean, y los métodos que se van a invocar A cont
GET Cliente ..................... Cliente.index index POST Cliente ....... ............ Cliente.store store GET Cliente/create .. ........... Cliente.create create GET Cliente/{Cliente} .......... Cliente.show show PUT Cliente/{Cliente} ........... Cliente.update update DELETE Cliente/{Cliente} ........... Cliente.destroy destroy GET Cliente/{Cliente}/edit....... Cliente.edit edit
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;
- 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">×</button> {{Session::get("mensaje_accion")}} </div>