Recuperar todos los registros de mi tabla asociada a mi modelo y extraer solo las columnas necesarias.
Hola developers, hoy en esta sección vamos a aprender a extraer solo las columnas que necesitamos mediante eloquent.
Autor: rogercode. Full stack developerHay ocasiones en donde no necesitamos obtener todas las columnas de la tabla. Y para ello podemos utilizar los métodos map(), select() y el bucle foreach que nos permiten crear un nuevo array con las columnas especificadas.
- Para esto se utilizarán tres ejemplos de código.
- Se utilizará eloquent y forech.
- Se utilizará eloquent y el método map().
- Se utilizará eloquent y el método select().
Antes de empezar a recuperar datos de la base de datos necesitas crear un modelo e importar el modelo al controlador. Consultar como crear y configurar un modelo.☛ Ver mas.
En el controlador se debe de crear un método en este caso utilizamos el index. Ver el código para entender.☟
Ejemplo con eloquent y foreach.
<?php
namespace App\Http\Controllers;
use App\Models\User; //Importamos nuestro modelo
class UserController extends Controller
{
public function index()
{
$user = User::all(); //Obtenemos todos los datos del usuario
$arrayUser = []; //Declaramos un array vacío
foreach ($user as $dato) { //Recoremos la variable $user con un foreach para extraer solo los datos que necesitamos
$id = $dato->id;
$nombre = $dato->nombre;
$apelidos = $dato->apellidos;
$email = $dato->email;
$password = $dato->password;
$arrayUser[] = [ //En cada recorrido agregamos los datos al array $arrayUser
'id'=>$id,
'nombre'=>$nombre,
'apellidos'=>$apellidos,
'email'=>$email,
'password'=>$password
];
}
//Al finalizar retornamos la vista y le pasamos como parámetro el array que se acaba de generar con la información.
return view('user.index', ['user'=>$arrayUser]);
}
}
Ejemplo con eloquent y el método map().
<?php
namespace App\Http\Controllers;
use App\Models\User; //Importamos nuestro modelo
class UserController extends Controller
{
public function index()
{
$user = User::all()->map(function($user){
return [ //Devuelve un nuevo objeto con las columnas que necesitamos extraer.
'id' => $user->id,
'nombre' => $user->nombre,
'apelidos' => $user->apellidos,
'email' => $user->email,
'password' => $user->password,
];
});
//Al finalizar retornamos la vista y le pasamos como parámetro el array que se acaba de generar con la información.
return view('user.index', ['user'=>$arrayUser]);
}
}
Ejemplo con eloquent y el método select para extraer solo las columnas especificas.
<?php
namespace App\Http\Controllers;
use App\Models\User; //Importamos nuestro modelo
class UserController extends Controller
{
public function index()
{
$user = User::select('id','nombre','apellidos','email','password')->get(); //Seleccionamos solo las columnas de nuestra tabla que necesitamos extraer.
//Al finalizar retornamos la vista y le pasamos como parámetro el array que se acaba de generar con la información.
return view('user.index', ['user'=>$arrayUser]);
}
}
Mostrar los registros obtenidos en una vista mediante una tabla con bootstrap 5.
Ahora vamos a mostrar los registros en nuestra vista user.index. Para ello vamos a recorrer nuestra variable $user que contiene el array de datos con un @foreach. Revisar el ejemplo.
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<title>Hello, world!</title>
</head>
<body>
<h1>Mostrar los registros en una vista mediante una tabla con bootstrap 5</h1>
<table class="table">
<thead>
<tr>
<th scope="col">Id</th>
<th scope="col">nombre</th>
<th scope="col">apellidos</th>
<th scope="col">email</th>
</tr>
</thead>
<tbody>
@foreach($user as $columna)
<tr>
<td>{{$columna->id}}</td>
<td>{{$columna->nombre}}</td>
<td>{{$columna->apellidos}}</td>
<td>{{$columna->email}}</td>
</tr>
@endforeach
</tbody>
</table>
<!-- Option 1: Bootstrap Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
</body>
</html>