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 developer

Hay 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>