第一次尝试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)
关于可能导致此错误的任何想法?
答案 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)
我会改变一些事情:
在您的新闻模型中,更改&#34;图像&#34;到&#34;图像&#34;因为它是一对多的关系。它只是保持你的代码清洁。
您视图中的foreach循环应循环遍历所有新闻模型,但请记住每个新闻模型都有多个图像,因此您应该在现有循环中有另一个循环来显示图像,即{{1} }
foreach ($new->images as $image)