目前我有两个模型,Roundtable和Table Category,我用下面的代码创建了它们之间的关系。
圆桌会议
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;。
我能知道有什么问题吗?
答案 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
我希望,它会对你有帮助。