Usuario:ManuelRomero/Laravel/eloquent
De WikiEducator
< Usuario:ManuelRomero | Laravel
Revisión a fecha de 21:16 2 mar 2020; ManuelRomero (Discusión | contribuciones)
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
- 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
php artisan make:resource Producto
- Esta acción creará la clase /App/Http/Resource/Producto.php
<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class Producto extends JsonResource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return array */ public function toArray($request) { return parent::toArray($request); } }
- Previamente hemos creado le modelo, controlador, migración y factory de producto
php artisan make:model Producto -a
- Esta acción nos creará las siguientes clases
- modelo
App/Http/Producto.php
- En este caso queremos cambiar algún atributo de los asignados por defecto, ya que voy a trabajar con una tabla que ya tenía
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Producto extends Model {
protected $table ="producto"; //Por defecto productos protected $primaryKey="cod"; //Por defecto Id public $incrementing = false; //Por defecto true //
}
- controlador
APP/Http/Controller/ProductoController.php
<?php namespace App\Http\Controllers; use App\Producto as Producto ; use App\Stock as Stock ; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; class ProductoController extends Controller { /** * Display a listing of the resource. index: Lo utilizaremos para mostrar la página inicial. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. create: Lo utilizaremos para mostrar el formulario de registro. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. store: Este método es importante, lo usaremos para recuperar los datos escritos en el formulario y lo guardaremos en nuestra base de datos. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. show para mostrar un registro concreto * * @param \App\producto $producto * @return \Illuminate\Http\Response */ public function show(producto $producto) { // } /** * Show the form for editing the specified resource. edit: Con este método mostraremos el formulario de edición. * * @param \App\producto $producto * @return \Illuminate\Http\Response */ public function edit(producto $producto) { // } /** * Update the specified resource in storage. * update: Con este método editaremos el registro. * @param \Illuminate\Http\Request $request * @param \App\producto $producto * @return \Illuminate\Http\Response */ public function update(Request $request, producto $producto) { // } /** * Remove the specified resource from storage. * * @param \App\producto $producto * @return \Illuminate\Http\Response */ destroy: Lo utilizaremos para eliminara un registro. public function destroy($cod){ } }
- migración
- factory
Class Usuario extends Eloquent{ }
- Por convención la clase Usuario interactuaría con el modelo usuarios
- Pero podemos especificar el nombre de la tabla que es un atributo de la clase
Class Usuario extends Eloquent{
protected $table = 'usuarios';
}
- Otras propiedades que podemos utilizar que tienen valor por defecto pero podemos modificar
Class Usuario extends Eloquent{
protected $table = 'usuarios'; protected $connection = 'tienda'; //Por defecto la conexión mysql de database.php protected $primaryKey = 'codigo'; //Por defecto id protected $timestamps = 'false'; //Por defecto true para actualizar los campos create_at update_up
}
- Como vemos el modelo da por supuesto que existen una serie de campos en la tabla, si no es así hay que especificarlo
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>