首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图获得非目标5.7的属性“子弹”

试图获得非目标5.7的属性“子弹”
EN

Stack Overflow用户
提问于 2019-08-02 11:42:32
回答 2查看 123关注 0票数 1

希望解决这个错误,当我试图向视图显示一些数据时,会遇到这个错误。我正在使用v5.7,我有一种感觉,它可能与我的控制器中的索引方法有关,我可能错了。如果需要更多的信息,请告诉我。

试图得到非对象的属性“弹格”(0)

路线:

代码语言:javascript
复制
Route::get('/category/{category}','BlogController@category')->name('category'); 

BlogCategory模型

代码语言:javascript
复制
namespace App;

use Illuminate\Database\Eloquent\Model;

class BlogCategory extends Model
{
   protected $fillable = ['title', 'slug']; 

   public function posts()
   { 
     return $this->hasMany(Post::class); 
   }

   public function getRouteKeyName()
   { 
     return 'slug'; 
   }
}

Post模型

代码语言:javascript
复制
public function category()
{
    return $this->belongsTo(BlogCategory::class);
}

控制器:

代码语言:javascript
复制
protected $limit = 3;

public function index()
{
    $categories = BlogCategory::with(['posts' => function ($query) {
        $query->published();
    }])->orderBy('title', 'asc')->get();

    $posts = Post::with('author')
        ->latestFirst()
        ->published()
        // ->filter(request()->only(['term','year','month']))
        ->simplePaginate($this->limit);

    return view('pages.frontend.blog.index', compact('posts', 'categories'));
}

public function category(BlogCategory $category)
{
    $categoryName = $category->title;

    $categories = BlogCategory::with(['posts' => function ($query) {
        $query->published();
    }])->orderBy('title', 'asc')->get();

    $posts = $category->posts()
        ->with('author')
        ->latestFirst()
        ->published()
        ->simplePaginate($this->limit);

    return view("pages.frontend.blog.index", compact('posts', 'categories', 'categoryName'));
}

视图:

代码语言:javascript
复制
@foreach ($posts as $post)
    <article class="post-item">
        @if ($post->image_url)
            <div class="post-item-image">
                <a href="{{ route('blog.show', $post->slug) }}">
                    <img src="{{ $post->image_url }}" alt="">
                </a>
            </div>
        @endif
        <div class="post-item-body">
            <div class="padding-10">
                <h2>
                    <a href="{{ route('blog.show', $post->slug) }}">{{ $post->title }}</a>
                </h2>
                {!! $post->excerpt_html !!}
            </div>

            <div class="post-meta padding-10 clearfix">
                <div class="pull-left">
                    <ul class="post-meta-group">
                        <li>
                            <i class="fa fa-user"></i>
                            <a href="#"> {{ $post->author->name }} </a>
                        </li>
                        <li>
                            <i class="fa fa-clock-o"></i>
                            <time> {{ $post->date }}</time>
                        </li>
                        <li>
                            <i class="fa fa-folder"></i>
                            <a href="{{ route('category', $post->category->slug) }}"> {{ $post->category->title }}</a>
                        </li>
                        <li>
                            <i class="fa fa-comments"></i>
                            <a href="#">4 Comments</a>
                        </li>
                    </ul>
                </div>
                <div class="pull-right">
                    <a href="{{ route('blog.show', $post->slug) }}">Continue Reading &raquo;</a>
                </div>
            </div>
        </div>
    </article>
@endforeach

邮政表

博客猫表

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-02 15:02:57

belongsTo函数在posts表中接受外键名称的第二个参数,如果不提供它,框架将尝试猜测外键列名是什么,在您的例子中是category(),因此框架正在搜索category_id,但是,您的外键列名是blog_category_id

代码语言:javascript
复制
public function category()
{
    return $this->belongsTo(BlogCategory::class, 'blog_category_id');
}
票数 1
EN

Stack Overflow用户

发布于 2019-08-02 12:02:15

如果此视图与index方法相关,则应在控制器的索引中调用类别关系!

代码语言:javascript
复制
public function index()
{
    $categories = BlogCategory::with(['posts' => function ($query) {
        $query->published();
    }])->orderBy('title', 'asc')->get();

    $posts = Post::with('author')
        ->category()
        ->latestFirst()
        ->published()
        // ->filter(request()->only(['term','year','month']))
        ->simplePaginate($this->limit);

    return view('pages.frontend.blog.index', compact('posts', 'categories'));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57325824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档