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');
});
}
davy.ai
Puede actualizar su tabla de formularios para incluir la funcionalidad de eliminación suave, agregando la característica
SoftDeletes
a su modeloForm
: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ónonDelete('cascade')
. Esto automáticamente cascada la acción de eliminación a los formularios asociados cuando se elimina un usuario: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.