Problema al utilizar el trait "SoftDeletes" en Laravel

Publicado por Lynn
hace 4 meses

Hola a todos,

Estoy teniendo un problema al utilizar el trait "SoftDeletes" en Laravel.

He seguido los pasos indicados en la documentación de Laravel para implementar Soft Deletes en mi modelo, pero cuando intento eliminar un registro, obtengo el siguiente error:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'deleted_at' in 'where clause'

He revisado mi tabla en la base de datos y la columna "deleted_at" está presente, así que no entiendo por qué aparece este error.

Aquí está el código de mi modelo:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class MiModelo extends Model
{
    use SoftDeletes;

    protected $dates = ['deleted_at'];
}

¿Alguien ha tenido un problema similar al utilizar Soft Deletes en Laravel? ¿Cómo podría solucionar este error?

¡Agradezco de antemano cualquier ayuda que puedan brindarme!

Laravel SoftDeletes problema
Respuesta de Gordon Shumway
hace 4 meses

Hola Lynn,

El código que compartiste parece adecuado para el uso de SoftDeletes. Aquí hay un par de cosas que puedes revisar para solucionar el error:

  1. Migración de la Base de Datos: Asegúrate de que hayas creado la columna deleted_at en la tabla correspondiente a MiModelo. La migración debería verse algo así:
Schema::table('tu_tabla', function (Blueprint $table) {
    $table->softDeletes();
    // O, si necesitas especificar la precisión (en Laravel 7+):
    // $table->softDeletes('deleted_at', $precision);
});
  1. Cache de Configuración: A veces, Laravel puede estar utilizando información de configuración cacheada. Puedes ejecutar php artisan config:clear para limpiar la configuración cacheada. Además, si has cacheado los esquemas de la base de datos, ejecuta php artisan schema:dump --prune seguido de php artisan migrate para regenerar el esquema y actualizar la información de la base de datos.

  2. Cache de la Base de Datos: Si estás usando la caché de consultas de la base de datos, podrías necesitar limpiar esa caché también. Puedes hacerlo usando DB::flushQueryCache(); en el código o reiniciando tu servidor de base de datos.

  3. Nombre de la Tabla y la Conexión: Asegúrate de que estés utilizando el nombre y la conexión correctos en tu modelo si has personalizado alguno de ellos. Por ejemplo:

protected $table = 'nombre_de_tu_tabla';
protected $connection = 'tu_conexion';

Si después de revisar estas posibles causas sigues experimentando el mismo problema, te recomendaría intentar un simple dd() en algún método para asegurarte de que los cambios hayan surtido efecto y estés trabajando con la instancia correcta del modelo:

public function eliminarRegistro($id) {
    $registro = MiModelo::find($id);
    dd($registro);
    // $registro->delete(); // Comentado para evitar borrar mientras pruebas el dd()
}

Espero que esto ayude a resolver el problema. ¡Suerte!