laravel5.1 使用 eloquent hasOne() 检索嵌套关系(一对一关系)
laravel5.1 retrieve nested relation using eloquent hasOne() (one to one relation)
我的table设计是:
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 }}
知道我哪里做错了吗?我一直收到这个错误:
Trying to get property of non-object
在我看来 table 之间的关系本身是正确的。
例如,当我在视图中使用 {{ dd($ticket) }}
时,我得到一个包含我需要的所有项目的对象:
所以首先,尝试访问 Ticket
模型上的函数 public function supporter()
不能使用数组语法来完成。变化:
{{ $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
的 Supporter
。请注意,您不能真正组合这些选项;修改函数以包含 ->first()
然后尝试使用 ->with()
将 return 出错,因此选择一个或另一个。
希望对您有所帮助!
我的table设计是:
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 }}
知道我哪里做错了吗?我一直收到这个错误:
Trying to get property of non-object
在我看来 table 之间的关系本身是正确的。
例如,当我在视图中使用 {{ dd($ticket) }}
时,我得到一个包含我需要的所有项目的对象:
所以首先,尝试访问 Ticket
模型上的函数 public function supporter()
不能使用数组语法来完成。变化:
{{ $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
的 Supporter
。请注意,您不能真正组合这些选项;修改函数以包含 ->first()
然后尝试使用 ->with()
将 return 出错,因此选择一个或另一个。
希望对您有所帮助!