laravel5.1 получает вложенные отношения, используя eloquent

Мой дизайн стола:

пользователи: | id | username | …

билеты: | 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 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

Есть идеи, где я делаю неправильно? Я все время получаю эту ошибку:

Попытка получить свойство необъекта (представление: C: \ xampp \ htdocs \ projekt \ resources \ views \ protected \ ticketsList.blade.php)

На мой взгляд, связь между самими таблицами выполнена правильно.

2

Решение

Проблема в следующей строке:

supporter: {{ $ticket->supp_id->username }}

Вы пытаетесь получить собственность username из атрибута (не объект) supp_idпопробуйте использовать скобки () ссылаться на метод supp_id() а не атрибут supp_id :

supporter: {{ $ticket->supp_id()->username }}

Замечания : Вы должны поставить foreach петля внутри @else пункт.

Надеюсь это поможет.

1

Другие решения

Для начала я думаю, что ваше мнение должно быть таким, поэтому вы можете просматривать только билеты, если они есть.

@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
0