我的桌面设计是:
users: | id |username | ... |
tickets: | id | supp_id | ... |
ticket_replies: | id | ticket_id | user_id |
我的控制器看起来像:
用户:
public function tickets()
{
return $this->hasMany('App\ticket');
}
票:
public function ticket_replie()
{
return $this->hasMany('App\ticket_replie');
}
public function supporter()
{
return $this->hasOne('App\User', 'id','supp_id');
}
我的控制器看起来像这样:
$tickets = Auth::user()->tickets()->orderBy('status', 'desc')->paginate(2);
return view('protected.ticketsList', [
'tickets' => $tickets,
]);
在我看来,我使用:
supporter: {{ $ticket['supporter']->username }}
知道我哪里做错了吗?我总是得到这个错误:
尝试获取非对象的属性
在我看来,表本身之间的关系是正确完成的。
当我在我的视图中使用例如{{ dd($ticket) }}
时,我得到一个包含我需要的所有项目的对象:
答案 0 :(得分:1)
首先,尝试访问public function supporter()
模型上的函数Ticket
无法使用数组语法完成。变化:
{{ $ticket['supporter']->username }}
为:
{{ $ticket->supporter()->first()->username }}
如果您不想使用->first()
,您可以执行以下两项操作之一。修改现有查询以包含->with("supporter")
语法:
$tickets = Auth::user()
->tickets()
->with("supporter")
->orderBy('status', 'desc')
->paginate(2);
从视图中访问支持者:
{{ $ticket->supporter->username }}
// Notice how supporter is no longer a `method` ->supporter() but a `property` ->supporter
或者您可以修改您的关系以包含更近的->first()
:
public function supporter(){
return $this->hasOne('App\User', 'id','supp_id')->first();
}
然后像这样访问它:
{{ $ticket->supporter()->username }}
// Notice you no longer need `->first()`
因此,正如您所看到的,有多种方法可以访问Ticket
的{{1}}。请注意,您无法真正结合这些选项;修改函数以包含Supporter
,然后尝试使用->first()
将返回错误,因此请选择其中一个。
希望有所帮助!