Cuando trabajamos con formularios la validación es una parte fundamental para garantizar no solo la seguridad de nuestras aplicaciones sino también de que estemos recibiendo correctamente la información que queremos guardar. Afortunadamente Laravel nos ofrece una forma muy práctica de realizar validaciones como veremos a continuación.

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

Cómo solucionar «Integrity constraint validation, column cannot be null»

Este error se produce cuando intentamos guardar null en una columna de la base de datos que no es «nullable».

Si estamos utilizando Laravel y queremos que un campo en la base de datos pueda ser null podemos encadenar la propiedad nullable al momento de agregar dicho campo en nuestra migración:

$table->string('title')->nullable();

Si tu proyecto ya se encuentra en producción, no es aconsejable que cambies las migraciones directamente. Por el contrario, puedes generar una nueva migración con el comando php artisan make:migration como ya aprendiste en la lección sobre migraciones y luego agregar el siguiente código al método up:

Schema::table('notes', function (Blueprint $table) {
    $table->string('title')->nullable()->change();
});

Por supuesto, ten en cuenta que algunos campos no deberían aceptar valores nulos, por ello es importante que valides la información antes de intentar guardarla en la base de datos.

Validación de datos con Laravel

Laravel nos ofrece un mecanismo de validación que podemos usar llamando al método validate() desde nuestro objeto Request

Podemos pasar las reglas de validación mediante un arreglo asociativo donde las llaves serán los nombres de los campos y los valores las reglas de validación:

<?php

Route::post('/notas', function (Request $request) {
    $request->validate([
        'title' => 'required',
        'content' => 'required',
    ])
  
    // ...
});

Al usar required como valor le indicamos a Laravel que el campo debe ser obligatorio.

Cómo agregar varias reglas de validación a un campo

Hay dos formas de definir más de una regla de validación a cada campo. La primera es separar las reglas con una barra vertical, por ejemplo:

<?php

$request->validate([
    'title' => 'required|min:5',
]);

Nota que también podemos especificar argumentos en una regla de validación utilizando dos puntos seguido del valor del argumento.

La segunda forma es utilizando un arreglo, donde cada valor será la definición de una regla de validación:

<?php

$request->validate([
    'title' => ['required', 'min:5'],
]);

Cómo especificar más de un argumento a una regla de validación

Hay reglas de validación que requieren más de un argumento. Puedes especificarlos separándolos por comas:

<?php

$request->validate([
    'title' => ['required', 'between:5,10'],
]);

Con esto especificamos que title es obligatorio y debe contener entre 5 a 10 caracteres.

Construir reglas con el objeto Rule

Incluso algunas reglas más complejas se pueden especificar a través de métodos o una combinación de cadenas y métodos dentro de un arreglo:

<?php

use Illuminate\Validation\Rule;

//...

$request->validate([
    'title' => ['required', 'min:3', Rule::unique('notes')],
    //...
]);

Como puedes ver esta sencilla sintaxis de Laravel es muy poderosa y más adelante te enseñaré cómo puedes crear tus propias reglas de validación.

Mostrando los errores de validación en la vista

Laravel automáticamente redirigirá de nuevo al formulario si la validación no es exitosa. Podemos hacer uso de la directiva @error para mostrar cada uno de los errores de forma individual de esta manera:

// Podemos mostrar cada error haciendo uso de la directiva @error y el nombre del campo

<input type="text" name="title">
@error('title')
    <p class="error-message">{{ $message }}</p>
@enderror

Podemos recuperar la información del formulario al momento de redirigir si la validación no es exitosa haciendo uso del Helper old:

<input type="text" name="title" value="{{ old('title') }}">
Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

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

Lección anterior Crea un formulario para agregar datos con Laravel 10 o superior Lección siguiente Traducir los mensajes de errores de validación en Laravel 10 o superior