Php laravel5.1使用eloquent检索嵌套关系
我的桌子设计是: 用户:| id |用户名| 门票:| id | supp | U id | 票证回复:| id |票证id |用户id 我的控制器看起来像: 用户: 门票:Php laravel5.1使用eloquent检索嵌套关系,php,eloquent,laravel-5.1,belongs-to,Php,Eloquent,Laravel 5.1,Belongs To,我的桌子设计是: 用户:| id |用户名| 门票:| id | supp | U id | 票证回复:| id |票证id |用户id 我的控制器看起来像: 用户: 门票: public function ticket_replie() { return $this->hasMany('App\ticket_replie'); } public function supp_id() { return $this->hasOne('App\
public function ticket_replie()
{
return $this->hasMany('App\ticket_replie');
}
public function supp_id()
{
return $this->hasOne('App\User', 'id','supp_id');
}
我的控制器如下所示:
$tickets = Auth::user()->tickets()->orderBy('status', 'desc')->paginate(2);
return view('protected.ticketsList', [
'tickets' => $tickets,
]);
在我看来,我使用:
@foreach ($tickets as $ticket)
<br>
<br>
ID: {{$ticket->id}}
title: {{ $ticket->title}}<br>
status: {{ returnStatus($ticket->status) }}<br>
@if($ticket->supporter = null)
supporter: -<br>
@else
supporter: {{ $ticket->supp_id()->username }}
@endif
created: {{ $ticket->created_at }}<br>
@endforeach
@foreach($tickets作为$ticket)
ID:{{$ticket->ID}
标题:{{$ticket->title}}
状态:{{returnStatus($ticket->status)}}
@如果($ticket->supporter=null)
支持者:-
@否则
支持者:{{$ticket->supp_id()->username}
@恩迪夫
已创建:{{$ticket->created_at}}
@endforeach
知道我哪里做错了吗?我一直收到这个错误:
正在尝试获取非对象的属性(视图:C:\xampp\htdocs\projekt\resources\views\protected\ticketsList.blade.php)
在我看来,表之间的关系本身是正确的。问题在于以下几行:
supporter: {{ $ticket->supp_id->username }}
您试图从属性(非对象)supp\u id
获取属性username
,尝试使用括号()
引用方法supp\u id()
,而不是属性supp\u id
:
supporter: {{ $ticket->supp_id()->username }}
注意:您应该将foreach
循环放入@else
子句中
希望这能有所帮助。对于初学者,我认为你的观点应该是这样的,这样你只有在有票的情况下才能循环查看票
@if(!$tickets->count() > 0)
no tickets created
@else
@foreach ($tickets as $ticket)
{{dd($ticket->ticket_replie)}}
title: {{ $ticket->title}}<br>
status: {{ returnStatus($ticket->status) }}<br>
supporter: {{ $ticket->supp_id->username }}
created: {{ $ticket->created_at }}<br>
@endforeach
@endif
@if(!$tickets->count()>0)
没有创建票证
@否则
@foreach($tickets作为$ticket)
{{dd($ticket->ticket_replie)}
标题:{{$ticket->title}}
状态:{{returnStatus($ticket->status)}}
支持者:{{$ticket->supp\u id->username}
已创建:{{$ticket->created_at}}
@endforeach
@恩迪夫
此通知涉及哪一行?在编辑示例错误消息的代码后,您的其中一张票证的supp_id设置没有更改(见上文)。我不知道为什么,每张票证都包含一个指向用户帐户的有效“supp_id”。请尝试替换$this->belongsTo('App\user','id','supp_id')代码>由$this->belongsTo('App\User','supp\u id')代码>。在您的思考者控制台中尝试App\Ticket::find(现有票证的id)->supp\u id()
。也可以尝试$Ticket->supp\u id()->first()->username
$Ticket->supp\u id()->first()->username
工作,但为什么“first”?为什么它返回多个项目?有没有更好的解决方案来完成这项工作?可能不需要->first()
?一张票只能有一个支持者。
@if(!$tickets->count() > 0)
no tickets created
@else
@foreach ($tickets as $ticket)
{{dd($ticket->ticket_replie)}}
title: {{ $ticket->title}}<br>
status: {{ returnStatus($ticket->status) }}<br>
supporter: {{ $ticket->supp_id->username }}
created: {{ $ticket->created_at }}<br>
@endforeach
@endif