Laravel雄辩 - 一对多的关系(试图获得非对象的属性)

时间:2013-03-28 22:35:42

标签: php laravel eloquent

我有“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

我是新手,请帮我解决这个问题

4 个答案:

答案 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)

当您使用has_many关系时,

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');
    }