Php laravel5.1使用eloquent检索嵌套关系

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\

我的桌子设计是:

用户:| 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\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