Laravel 删除论坛主题

Laravel deleting a thread of a forum

我已经搜索并尝试了很多类似案例的解决方案,但对我的案例没有任何效果。我对 Laravel 还是很陌生,对 eloquent 不是很了解。我正在尝试删除论坛的帖子,请帮忙。

这是删除话题的路径:

Route::get('/forum/{forum_id}/thread/{thread_id}/delete', [
'uses' => 'ForumsController@deleteThread',
'as' => 'thread.delete']);

这是函数(我不知道如何获取线程id):

    public function deleteThread($id)
    {
        $forum = Forum::find($id);
        $thread = $forum->threads;

        dd($thread);
        $thread->delete();

        return redirect()->back();
    }

这是删除按钮:

<a href="{{ route('thread.delete', ['forum_id' => $forum->id, 'thread_id' => $thread->id]) }}" class="btn btn-danger">Delete</a>

这是论坛模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Forum extends Model
{
    public function threads () {
        return $this->hasMany(Thread::class);
    }
}

这是线程模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Thread extends Model
{
    public function forum () {
        return $this->belongsTo(Forum::class);
    }
}

您的路线如下所示:

Route::get('/forum/{forum_id}/thread/{thread_id}/delete', [ ... ])

您必须使用 forum_idthread_id 作为控制器函数的参数:

public function deleteThread($forum_id, $thread_id)
{
    $forum = Forum::find($forum_id);
    $thread = Thread::find($thread_id);

    $thread->delete();

    return redirect()->back();
}

您甚至可以让 Laravel 为您将 ForumThread 注入控制器 - 通过在函数上输入提示:

public function deleteThread(Forum $forum, Thread $thread)
{
    $thread->delete();

    return redirect()->back();
}

当然你必须分别将路由的forum_id参数调整为forum,将thread_id调整为thread。这还需要在其他视图中更改您传递给 URL 的参数(又名 删除按钮 )。

更新 顺便说一下,您不应该使用获取请求进行删除。您应该使用 DELETE HTTP 请求。

你应该试试这个:

public function deleteThread($forum_id,$thread_id)
    {
        Thread::destroy($thread_id);

        return redirect()->back();
    }