Laravel模型关系问题

时间:2016-12-26 07:40:42

标签: laravel laravel-5

目前我有两个模型,Roundtable和Table Category,我用下面的代码创建了它们之间的关系。

圆桌会议

roundtables

table_categories

table_categories

表类别模型

public function roundtables(){
    return $this->hasMany('App\Roundtable');
}

圆桌会议模型

public function table_category()
{
    return $this->belongsTo('App\Table_Category');
}

我的控制器

public function show(Request $request){
    $id=Auth::user()->id; //Logged user id is 1
    $table= Roundtable::where('user_id',$id)->get();
    return view('users.tables.show')->withTables($table);

}

这应该连接起来吗?

然后当我试图展示

 @foreach($tables as $table)
                    <tr>
                        <td><a href="{{ route('table_page',['id'=>$table->id]) }}">{{$table->name}}</a></td>
                        <td>
                            <a href="#" class="btn btn-info btn-xs">View</a>
                            <a href="#" class="btn btn-primary btn-xs">Edit</a>
                            <a href="#" class="btn btn-danger btn-xs">Delete</a>
                        </td>
                    </tr>
                        <tr>
                            <td>{{ $table->table_category->name }}</td>
                        </tr>
                    @endforeach

它会发生错误&#34;试图获得非对象的属性&#34;。

我能知道有什么问题吗?

4 个答案:

答案 0 :(得分:1)

get()将返回集合。使用first()获取对象:

$table = Roundtable::where('user_id', $id)->first();

答案 1 :(得分:1)

您可以通过两种方式完成此操作。首先是通过使用关系。在您的控制器尝试这样的事情:

public function show(Request $request){
    $id=Auth::user()->id; //Logged user id is 1
    $table= Roundtable::with('table_category')->where('user_id',$id)->get();
    return view('users.tables.show', compact('table'));
}
在这种情况下,

users/tables/show.blade.php应保持不变。

第二种方式:

在圆桌会议模型上添加以下方法:

public function getCategoryAttribute(){
        $category = CategoryModel::where('id', $this->attributes['category_id'])->first();
        if(!$category ){
            return "";
        }
        return $category->name;
    }

并且在您的视图中,您必须更改:

{{ $table->table_category->name }}

{{ $table->category }}

答案 2 :(得分:0)

您想致电newline

first

答案 3 :(得分:0)

您在查询中使用get()。这是一个雄辩的收藏。

您需要使用foreach或first作为查询。

foreach($table as $item){
   $item->table_category->name
}

$table= Roundtable::where('user_id',$id)->first();
$table->table_category->name

我希望,它会对你有帮助。