es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Laravel 8: SoftDeletes no se actualiza al eliminar un usuario vinculado a un formulario.

Tengo un problema en Laravel 8 cuando elimino un usuario, mi campo ‘deleted_at’ se actualiza en mi tabla ‘users’ pero no en la tabla ‘forms’, ya que quiero eliminar los formularios vinculados a este usuario, de lo contrario tengo un error porque muestro su información cuando ya no existe.
¿Cómo soluciono este problema, por favor?

He utilizado el borrado suave en los modelos y ‘deleted_at’ se actualiza cuando elimino el formulario.

Migración de usuarios:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('firstname');
        $table->string('lastname');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->foreignId('current_team_id')->nullable()->onDelete('cascade');
        $table->string('profile_photo_path', 2048)->nullable();
        $table->timestamps();
        $table->foreignId('role_id')->references('id')->on('roles')->onDelete('cascade');
        $table->softDeletes();
    });
}

public function down()
{
    Schema::dropIfExists('users', function (Blueprint $table) {
        $table->dropColumn('deleted_at');
    });
}

Migración de formularios:

public function up()
{
    Schema::create('forms', function (Blueprint $table) {
        $table->id();
        $table->string('title', 100);
        $table->text('message');
        $table->datetime('date');
        $table->string('color');
        $table->softDeletes();
        $table->timestamps();
    });
}

public function down()
{
    // Schema::dropIfExists('forms');
    Schema::table('forms', function (Blueprint $table) {
        $table->dropColumn('deleted_at');
    });
}

Agregar usuario a la migración de formularios:

public function up()
{
    Schema::table('forms', function (Blueprint $table) {
        $table->unsignedBigInteger('user_id');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}

public function down()
{
    Schema::table('forms', function (Blueprint $table) {
        $table->dropForeign('user_id')->onDelete('cascade');
    });
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puede actualizar su tabla de formularios para incluir la funcionalidad de eliminación suave, agregando la característica SoftDeletes a su modelo Form:

    use Illuminate\Database\Eloquent\SoftDeletes;
    
    class Form extends Model
    {
        use SoftDeletes;
    
        // ...
    }
    

    Una vez que haya agregado la característica a su modelo, puede crear una restricción de clave externa en la tabla users con la opción onDelete('cascade'). Esto automáticamente cascada la acción de eliminación a los formularios asociados cuando se elimina un usuario:

    public function up()
    {
        Schema::table('forms', function (Blueprint $table) {
            $table->foreignId('user_id')->constrained()->onDelete('cascade');
        });
    }
    
    public function down()
    {
        Schema::table('forms', function (Blueprint $table) {
            $table->dropForeign(['user_id']);
        });
    }
    

    Con estos cambios en su lugar, cuando se elimina un usuario, también se eliminarán todos los formularios asociados, y no tendrá que preocuparse por mostrar información para un usuario que ya no existe.

Comments are closed.