0

我正在将数据库中的数据显示到 show.blade.php 但此问题显示以下代码: BlockController

public function show(Blog $id)
    {
        //
        $blogs = Blog::findOrfail($id);
        return view('blog.show', compact('blogs'));
    }

show.blade.php

@section('content')
    
        <h3>{{ $blogs->title }}</h3>
        
@endsection

dd($blogs) 的输出: 图像 我尝试了所有我得到的选项但仍然无法正常工作..

4

2 回答 2

1

具有该方法签名$id的是模型实例。Eloquent 模型实现Illuminate\Contracts\Support\Arrayable。如果您将某个是Arrayable或是一个数组的东西传递给正在调用的findfindOrFail它会将其视为您正在寻找多条记录并返回一个集合。

您有一个 Collection 而不是 Model 实例。

如果您的方法签名没有键入提示模型,那么它会更有意义,因为您将拥有“id”。如果您为这些方法键入提示模型,通常您将使用路由模型绑定。

路由模型绑定:

public function show(Blog $blog)
{
    // $blog is the matching record
}

没有模型绑定并且只获取参数:

public function show($blog)
{
    // $blog is just the 'id' or what ever you decided to pass in the URL
}

您的路线有一个名为的参数blog,因为您的资源名为“博客”。要使隐式路由模型绑定到位,您必须将参数名称与签名中的参数名称相匹配。

于 2020-07-10T05:47:21.490 回答
0

在你的函数show(Blog $id)中, $id 是实例 Blog::class

你接下来需要做什么$blogs = Blog::findOrfail($id->id);

于 2020-07-10T05:55:38.880 回答