Laravel 雄辩:属于关系 - 错误:试图获取非对象的属性


Laravel Eloquent : belongsTo relationship - Error: Trying to get property of non-object

第一次尝试 laravel 雄辩的相对论提示

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

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

在数据库中

表:

news  
id | header | details 
news_image
id | image | news_id 

并有2个模型 新闻 , 新闻图片

新闻图片模型:

 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)

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

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

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

分解一下:

  • ->image获得NewsImage关系的集合
  • ->first()获取集合中的第一项
  • ->image(秒)从该NewsImage获取图像字段

如果"集合"有多个项目,则可以改为循环访问它以获取所有图像,如其他答案所示。

有几件事我会改变:

  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