En este videotutorial de Laravel, nos enfocaremos en aplicar los conocimientos del constructor de consultas que aprendimos en la lección anterior, para hacer que nuestras rutas y vistas de Blade sean más dinámicas. También aprenderemos una forma simple de depurar errores y retornar páginas 404 con ayuda del framework.

Mira el código en GitHub: actual, resultado, comparación.

Obtener un listado de registros

De vuelta a routes/web.php vamos a obtener las notas que tenemos en la tabla de notes con el siguiente código:

<?php

// use Illuminate\Support\Facades\DB;

Route::get('/', function () {
    $notes = DB::table('notes')->get();

    return view('notes')->with('notes', $notes);
})->name('notes');

Puesto que este archivo no tiene espacio de nombres, podemos utilizar el Facade DB sin importar su clase, esto es debido a que Laravel incluye alias de sus Facades. Alternativamente, podemos importar el Facade (descomentando la línea 3 del ejemplo) y el código funcionará de la misma forma.

Si recargamos ahora el navegador veremos el siguiente error:

htmlspecialchars error

Esto sucede porque, como vimos en la lección anterior, ahora cada nota en la variable $note es un objeto de la clase estándar que incluye PHP (stdClass) en vez de una cadena de texto. Así que para mostrar el título y contenido de la nota debemos acceder a las propiedades de dicho objeto (cada columna que obtengamos estará disponible como una propiedad):

<!-- resources/views/notes/index.blade.php -->
<div class="card-body">
  <h4>{{ $note->title }}</h4>

  <p>
    {{ $note->content }}
  </p>
</div>

Nota que por los momentos perderemos los estilos de HTML, pero en una sección más avanzada de este curso veremos cómo podemos compilar este markdown como código HTML.

Obtener un solo registro

Regresemos a routes/web.php y cambiemos el código de la ruta para editar notas:

<?php

Route::get('notas/{id}/editar', function ($id) {
    $note = DB::table('notes')->find($id);

    return ['note' => $note];
})->name('notes.edit');

La consulta tiene 2 pasos:

  1. Primero comenzamos a construir la consulta con DB::table('notes') por supuesto esto le indica a Laravel que trabaje con la tabla de notas.
  2. Luego usamos el método find() pasando como único argumento el ID de la nota que queremos encontrar.

Depuración simple con Laravel

Laravel incluye un par de Helpers para depurar nuestras aplicaciones. El Helper dd, cuyas siglas provienen de «dump & die» por las funciones de PHP var_dump y die respectivamente, nos permite imprimir el contenido de una o más variables y finalizar la ejecución de la aplicación inmediatamente. Este Helper es útil para depurar aplicaciones simples como la nuestra.

Alternativamente, puedes usar el Helper ddd que mostrará información más detallada sobre tu aplicación.

Más adelante aprenderemos a depurar con recursos más avanzados como xDebug.

¿Qué podemos hacer cuando no se encuentran registros?

Como vimos en el video anterior, si el método find no encuentra ningún registro, devolverá NULL y esto causaría un error en nuestra vista. Una forma de manejar este problema es utilizando el Helper abort_if:

<?php

abort_if($note === null, 404);

Laravel también incluye el Helper abort_unless que podríamos usar de esta forma:

<?php

abort_unless($note, 404); // o abort_unless($note != null, 404);

Si la condición pasada como primer argumento no es la esperada, el framework lanzará una excepción de tipo NotFoundHttpException la cual será procesada y convertida en una respuesta 404. De este tema hablaremos a más profundidad en cursos más avanzados.

Eliminando las notas estáticas

Ahora que obtendremos los registros de la base de datos, no necesitamos las notas estáticas de resources/views/notes.blade.php.

Podemos eliminarlas seleccionando desde el primer <div class="card"> de la primera nota, hasta el cierre del mismo div de la última nota.

Cuando elimines bloques de HTML ten cuidado de no dejar etiquetas abiertas sin cierre. Sangrar el código provee una ayuda visual adicional para eliminarlo o moverlo de manera correcta.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Obtener registros de la base de datos con Laravel 10 Lección siguiente Introducción al ORM Eloquent en Laravel 10