Laravel Eloquent:belongsTo relationship - 错误:试图获取非对象

时间:2015-06-19 16:51:59

标签: php laravel

第一次尝试laravel eloquent relatioinstip

我知道这很简单,但我收到这个错误,不知道它有什么问题

我在数据库,news和news_image中有2个表

在数据库中

表:

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>

当我运行它时会出现错误:

  

尝试获取非对象的属性(查看:/var/www/html/clinics/app/views/news/index.blade.php)

关于可能导致此错误的任何想法?

2 个答案:

答案 0 :(得分:3)

首先,假设您传递给视图的是News个对象的数组或集合,您可能应该使用$new->image来访问News Item关系。通过在image()模型中定义函数News,您可以访问与->image->image()调用的关系。在任何一种情况下,您需要调用的可能是

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

要打破这一点:

  • ->image获取NewsImage关系
  • 的集合
  • ->first()获取Collection
  • 中的第一项
  • ->image(secone one)从NewsImage
  • 获取图片字段

如果Collection有多个项目,您可以循环遍历它以获取所有图像,如另一个答案中所示。

答案 1 :(得分:2)

我会改变一些事情:

  1. 在您的新闻模型中,更改&#34;图像&#34;到&#34;图像&#34;因为它是一对多的关系。它只是保持你的代码清洁。

  2. 您视图中的foreach循环应循环遍历所有新闻模型,但请记住每个新闻模型都有多个图像,因此您应该在现有循环中有另一个循环来显示图像,即{{1} }

    foreach ($new->images as $image)