Habilitando el modo estricto en Eloquent

Desde Laravel 9.35, Eloquent incluye un modo estricto que nos será bastante útil a la hora de desarrollar nuestra aplicación para evitar problemas de rendimiento y funcionalidad futuros.

Este modo estricto lanzará una excepción en los siguientes casos:

  • Al acceder a una relación que no se ha hecho eager loading con la función with(), para evitar problemas N+1 en la base de datos
  • Al intentar insertar un atributo que no está declarado en $fillable
  • Al intentar acceder a un atributo inexistente de un modelo (ej. una columna que no existe)

Como podéis ver, habilitar este modo tiene muchas ventajas ya que nos hará más fácil evitar ciertos errores bastante comunes cuando trabajas con Eloquent.

Para habilitarlo, tenemos que llamar a Model::shouldBeStrict() dentro del método boot() del AppServiceProvider. Este método admite una boolean como parámetro (para habilitarlo o deshabilitarlo), por lo que es una buena práctica deshabilitarlo en producción para evitar errores 500 a los usuarios:

<?php

namespace App\Providers;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
    	// ...
        Model::shouldBeStrict(! app()->isProduction());
    }
}