我有“posts”表,与“categories”表有多对一的关系。目标是显示所有帖子及其类别。
表:
帖子:id,content,category_id等
类别:id,name
这是我的代码
型号:
class Posts extends Eloquent
{
public static $table = 'posts';
public function categories()
{
return $this->belongs_to('Categories');
}
}
class Categories extends Eloquent
{
public static $table = 'categories';
public function posts()
{
return $this->has_many('posts');
}
}
我的控制器
public function get_posts()
{
$posts = Posts::with('categories')->all();
return View::make('admin.posts')
->with('title', 'Posts')
->with('posts', $posts);
}
我的观点
@foreach($posts as $post)
<tr>
<td>{{ $post->title }}</td>
<td>{{ $post->categories->name }}</td>
<td><small> {{$post->updated_at}} </small></td>
<td>
<button>
{{HTML::link_to_route('edit_post','Edit',array($post->id))}}
</button>
{{Form::open('admin/delete','Delete')}}
{{Form::hidden('id', $post->id)}}
<input type="submit" name="edit_post" value="Delete"/>
{{Form::close()}}
</td>
</tr>
@endforeach
ERROR:
Error rendering view: [admin.posts]
Trying to get property of non-object
我是新手,请帮我解决这个问题
答案 0 :(得分:2)
{{$ post-&gt; categories-&gt; name}}是否存在类别
示例:
@if( ! empty($post->categories))
<td>{{ $post->categories->name }}</td>
@else
@end if
Aesis。
答案 1 :(得分:0)
只需使用::all()
代替::with(..)->all()
答案 2 :(得分:0)
categories是一个数组。有许多类别,因此返回一个数组,因此要访问它,您必须将其索引为数组
正确的解决方案是
$后&GT;类别[0] - &GT;名称
答案 3 :(得分:0)
您使用的是Laravel 4吗?首先,在camel的情况下,声明关系的语法是hasMany和belongsTo。在Laravel documentation
中查看在视图中,检查类别是否为空集合,即,帖子是否具有其类别:
@if($post->categories->count())
<td>{{ $post->categories->name }}</td>
...
@endif
顺便说一句,我会使用单数形式作为模型类名称,如Post和Category,而不是复数形式。在Post类中,我将使用单数形式定义反向一对多关系,以显示此给定帖子的类别表中只有一个条目。
public function category()
{
return $this->belongsTo('Category');
}