2015-11-12 52 views
0

訪問集合時得到非對象的屬性我寫了一個控制器發送帖子模型這是一起分類和圖片:試圖在查看

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) 

什麼是問題?我如何在視圖中訪問該集合?

+0

你的用法是正確的。你確定導致錯誤的行實際上是帶有@ @ if條件的行嗎?此外,不需要'@ if'條件,因爲一個空集合不會在不拋出任何錯誤的情況下迭代任何東西。 – Bogdan

+0

您可以嘗試'@if(空($ latestPosts))' – Saad

+0

@Saad公平點,但是查詢生成器的get方法總是返回一個Collection實例,即使它沒有任何項目,'isEmpty'方法儘管如此。 – Bogdan

回答

0

我發現在我的視圖中有一個Typo在訪問Post Model屬性。

我一定要用latestPicture name取代latest_picture

我改正它,所有的東西都正常工作。

1

他們有兩件事情我寧願做不同於你在那裏可能會帶走你的錯誤,因爲你不必使用isEmpty()屬性。取而代之的是@if語句,你可以有一個像@forelse

@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)的結果將使調試更容易。 即使你已經改正了錯字,並且花了我更長的時間來發布這篇文章,我認爲你應該考慮一些提到的東西