Php 访问视图中的集合时尝试获取非对象的属性

Php 访问视图中的集合时尝试获取非对象的属性,php,laravel,Php,Laravel,我编写了一个控制器来发送Post模型及其类别和图片: class HomeController extends Controller { public function index () { $latestPosts = Post::with([ 'latestPicture', 'categories' =&g

我编写了一个控制器来发送Post模型及其类别和图片:

    class HomeController extends Controller
    {
        public function index ()
        {

            $latestPosts =
                Post::with([
                    'latestPicture',
                    'categories' => function ($query) {
                        $query->select(['categories.cat_id', 'name']);
                    }
                ])
                    ->take(12)->orderBy('created_at', 'desc')
                    ->get(['post_id', 'post_title', 'post_alias', 'post_content', 'comments_count', 'created_at']);
//          dd($latestPosts) ;
            return view('main.pages.home', ['latestPosts' => $latestPosts]);
        }
    }
在我看来,为了使用最新的帖子,我写下如下:

@if (!$latestPosts->isEmpty())
    @foreach($latestPosts as $post)
        @if( key($latestPosts) <3)
            <!-- Some HTML -->
        @endif
    @endforeach
@endif

问题是什么?如何在视图中访问该集合?

我发现在访问视图中的Post Model属性时有一个输入错误

我必须使用最新图片名称,而不是最新图片


我纠正了它,一切都正常。

这两件事我宁愿做得不同于你现在所做的,这可能会消除你的错误,因为你不必使用isEmpty()属性。您可以使用
@forelse
语句代替
@if
语句,如:

@forelse($latestPosts as $key => $post)
    @if($key <= 3)
    <!-- Some HTML -->
    @endif
@empty

@endforelse
而不是
@if(!$latestPosts->isEmpty())
,但后者只是为了让代码更清晰、更易于阅读。粘贴
dd($latestPosts)
的结果将使调试更加容易。
即使你已经纠正了错字,我花了更长的时间来张贴,我认为你应该考虑一些被提及的事情

你的用法是正确的。您确定导致错误的行实际上是具有
@if
条件的行吗?另外,不需要
@if
条件,因为空集合不会迭代任何内容而不会抛出任何错误。您可以尝试
@if(empty($latestPosts))
@Saad fair point,但是查询生成器的
get
方法始终返回集合实例,即使其中没有项,尽管如此,
isEmpty
方法还是可用的。我认为
@if(key($latestPosts)也可以,如果你想访问集合索引,你可以像
@foreach($I=>$post)一样将它传递到
@if($I<3)中
。但是如果您确实想只显示集合中的前3个元素,可以使用
@foreach($latestPosts->take(3)as$i=>$post)
并删除
@if
条件。
@forelse($latestPosts as $key => $post)
    @if($key <= 3)
    <!-- Some HTML -->
    @endif
@empty

@endforelse
@unless($latestPosts->isEmpty())
    @foreach()
    @endforeach
@endunless