删除关系的最佳方法mysql(laravel)

时间:2020-11-06 00:04:55

标签: mysql laravel

我必须这样做

查询所有具有非空值的MailTask​​的Deleted_at列 然后从数据库中物理删除它,先删除他的 表MailTask​​MailMessage中的关联

我必须先删除关联的数据

,我执行了此功能

        MailTask::query()->whereNotNull('deleted_at')->with('mail_task_mail_message')->forceDelete();

但我认为并非如此

这些是迁移中的关系

Schema::create('mail_task_mail_message', function (Blueprint $table) {
            $table->id();
            $table->unsignedInteger('type');
            $table->text('description');
            $table->decimal('value', 16, 2);
            $table->foreignId('mail_task_id')->constrained('mail_tasks')->onDelete('cascade');
            $table->foreignId('mail_message_id')->constrained('mail_messages')->onDelete('cascade');
            $table->timestamps();
        });

还有这个

Schema::create('mail_tasks', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->text('meo_data');
    $table->unsignedInteger('state')->default(0);
    $table->text('recipients_names');
    $table->text('recipients_emails');
    $table->unsignedBigInteger('meo_id');
    $table->foreign('meo_id')->references('id')->on('meos')->onDelete('cascade');
    $table->timestamps();
    $table->softDeletes();
});

我的代码可以吗?还是错?

1 个答案:

答案 0 :(得分:1)

您的mail_task_mail_message表上有一个级联外键,因此您只需要执行以下操作:

MailTask::whereNotNull('deleted_at')->forceDelete();

您必须使用forceDelete()实际删除寄存器,而不仅仅是设置delete_at列。

相关问题