使用FK创建URL

时间:2018-04-12 13:38:44

标签: laravel laravel-5 laravel-5.4 laravel-5.6

我试图创建一个读取www.localhost / forum / {slug} / thread = {id}的网址,但我遇到了问题。 {id}部分将返回,因为这是线程ID,但{slug}部分我试图通过foriegn密钥检索并获得问题。

Call to a member function forums() on null

这是我的表格 论坛:id,name,slug,timestamps 主题:id,name,forum_id,user_id

这是我在线程模型上的关系

public function forums(){
    return $this->belongsTo('App\Forum');
}

这是我在ThreadController上的代码

    public function show($id, $slug)
{
    //
    $thread = Thread::find($id);
    $thread->forums()->slug = $slug;

    return view('forum.thread')->withThread($thread);
}

关于我如何将论坛的重点放入网址的任何想法?

3 个答案:

答案 0 :(得分:0)

因为$thread = Thread::find($id)没有得到任何线程。您可以使用findOrFiail函数,或检查是否存在线程,然后调用forums()

答案 1 :(得分:0)

也许试试$thread->forums()->setAttribute('slug', $slug)

答案 2 :(得分:0)

所以看起来id不是路由参数。

你的控制器方法应该是

public function show($slug)
{
    $thread = Thread::find(request()->input('id'));
    $thread->forums()->slug = $slug;

   return view('forum.thread')->withThread($thread);
}

要么改变你的路线