当我删除 post(campaign) 时,与已删除活动相关的付款仍在数据库中,我也想将其删除。 (laravel,控制器)

when i delete post(campaign) , payments that related to the deleted campaign still in the DB , i want to delete it also. (laravel,controller)

需要一些帮助

当我从我的众筹平台删除一个活动时,如果这个活动已经有一些付款,我会收到一个错误,

没有活动的付款仍在数据库中 所以我的付款列表视图中出现错误。我唯一的解决方案是转到数据库并删除属于已删除活动的付款。

when i delete campaign , it must also delete his own payments

    public function deleteCampaigns($id = 0){
        if(config('app.is_demo')){
            return redirect()->back()->with('error', __('app.feature_disable_demo'));
        }

        if ($id){
            $campaign = Campaign::find($id);
            if ($campaign){
                $campaign->delete();
            }
        }
        return back()->with('success', trans('app.campaign_deleted'));
    }

every payments in database is related to a campaign_id from campaign table

如果您在 Campaign 模型上正确设置了 toMany 关系,那么您只需对该关系调用 delete(),如果没有额外的约束,它应该会删除所有相关付款。

所以假设 toMany 与付款的关系被称为 payments 那么:

if ($campaign){
  $campaign->payments()->delete();
  $campaign->delete();
}

编辑:

根据 Alex Mac 在评论中提到的内容,这可能是也可能不是您问题的最佳解决方案,尽管我认为这是最直接的答案。阅读关于此 Question

的答案

您可以在迁移中创建外键约束。例如,

$table->foreign('campaign_id') ->references('id')->on('payments') ->onDelete('cascade');

因此,当您删除活动时,它会删除其付款外键约束模型或更简单地说其 eloquent hasMany 关系。