2015-06-19 108 views
4

第一次嘗試laravel雄辯relatioinstipLaravel雄辯:屬於關聯關係 - 錯誤:試圖讓非對象的屬性

我知道這是很簡單,但我得到這個錯誤不知道是什麼地方錯了

我有2個表中的數據的基礎上,新聞和news_image

在數據庫

表:

news 
id | header | details 

news_image 
id | image | news_id 

並有2種型號新聞,newsImage

newsImage型號:

class newsImage extends Eloquant { 

    protected $table = 'news_image'; 
    public function news() 
    { 
     return $this->belongsTo('News'); 
    }  
} 

新聞模型

class News extends Eloquent 
{ 

    protected $table = 'news'; 

    public $timestamps = false; 


    public function image() 
    { 
     return $this->hasMany('newsImage'); 
    } 


} 

的觀點:

foreach($news as $new) 
<tr> 
    <td> {{$new->id}} </td> 
    <td> {{ $new->header}}</td> 
    <td> {{ $new->details }}</td> 
    </td> {{$new->news->image}}</td> 
</tr> 

當我運行這個它得到錯誤:

Trying to get property of non-object (View: /var/www/html/clinics/app/views/news/index.blade.php)

上什麼可能會造成這個錯誤的任何想法?

+0

你也可以發佈你的新聞模型嗎? – BakerStreetSystems

+0

已更新併發布了新聞模型 – Muhammed

+0

假設這是複製/粘貼的代碼,那麼您的'newsImage'類正在擴展的'Eloquant'就沒有這樣的東西。但我假設你沒有從中得到一個錯誤,這不是複製/粘貼? – Samsquanch

回答

2

有一對夫婦的事情,我會改變:

  1. 在您的新聞模式,關係從「形象」更改爲「圖像」,因爲它是一個一對多的關係。它只是保持你的代碼清潔。

  2. 在你看來你的foreach循環應該通過所有的新聞模式循環,但請記住,每個新聞模型有多個映像,所以你應該把你現有的循環內的另一個循環來顯示圖像,即foreach ($new->images as $image)

    @foreach ($news as $new) 
        <tr> 
         <td> {{$new->id}} </td> 
         <td> {{ $new->header}}</td> 
         <td> {{ $new->details }}</td> 
         <td> 
          @foreach ($new->images as $image) 
           {{ $image->image }} 
          @endforeach 
         </td> 
        </tr> 
    @endforeach 
    
+0

非常感謝它的工作:) – Muhammed

+0

如何將此標記爲答案呢? :-) – BakerStreetSystems

3

首先,假設你傳遞什麼到你的觀點是一個數組或集合News的對象,你或許應該使用$new->image訪問News Item關係。通過在您的News模型中定義功能image(),您可以使用->image->image()呼叫訪問該關係。在這兩種情況下,你需要調用哪些可能

$new->image->first()->image

是要打破下來:

  • ->image得到NewsImage關係
  • 的收藏
  • ->first()獲取集合
  • 中的第一項
  • ->image(白雲一號)從該圖像場獲得該圖像場NewsImage

如果集合有多個項目,則可以改爲循環以獲取所有圖像,如其他答案中所示。

+0

$ news = News :: paginate(15); 這就是我通過我的看法 謝謝你幫助我得到它:) – Muhammed