第一次尝试 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
获取图像字段
如果"集合"有多个项目,则可以改为循环访问它以获取所有图像,如其他答案所示。
有几件事我会改变:
-
在新闻模型中,将关系从"图像"更改为"图像",因为它是一对多关系。它只是保持你的代码干净。
-
视图中的 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