在View中访问Collection时尝试获取非对象的属性

时间:2015-11-12 12:45:52

标签: php laravel

我写了一个控制器来发送Post Model以及它的Categories和Pics:

    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]);
        }
    }

为了在我的视图中使用 latestPosts ,我写下这个:

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

但我遇到了这个错误:

Trying to get property of non-object (View: D:\wamp\www\TC\resources\views\main\pages\home.blade.php)

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

2 个答案:

答案 0 :(得分:1)

我发现在我的视图中有访问Post Model属性的Typo。

我必须使用 latestPicture 名称而不是 latest_picture

我纠正了,一切正常。

答案 1 :(得分:1)

他们有两件事我宁愿做与你那里有什么不同,这可能会带走你的错误,因为你不必使用isEmpty()属性。您可以使用@if代替@forelse语句代替{<1}}:

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

@endforelse

如果isEmpty()属性可用,我宁愿:

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

而不是@if(!$latestPosts->isEmpty()),但后者只是有一个更清晰,更容易阅读的代码。粘贴dd($latestPosts)的结果将使调试变得更容易。 即使你已经纠正了错字并且我花了更长的时间来发布这个,我认为你应该考虑一些提到的事情