2016-01-20 28 views
2

我的表設計是:laravel5.1使用檢索嵌套關係雄辯

用戶:| ID |用戶名| ...

門票:| 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 \資源\意見\保護\ ticketsList.blade.php)

在我觀點表格本身之間的關係是正確的。

+0

本通知涉及哪條線? – Okneloper

+0

您的其中一張票沒有supp_id集 –

回答

1

問題出在下面一行:

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

你試圖從屬性(非對象)supp_id獲取屬性username,嘗試用括號()來指代方法supp_id()而不是屬性supp_id

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

注:你應該把foreach循環中@else條款。

希望這會有所幫助。

+0

我更改了第一篇文章,編輯完代碼後,您的示例錯誤消息也發生了一些變化(請參閱上文)。我不知道爲什麼,每張票都包含一個指向用戶帳戶的有效「supp_id」。 –

+0

嘗試用'$ this-> belongsTo('App \ User','supp_id');'替換'$ this-> belongsTo('App \ User','id','supp_id');''。 –

+0

會產生相同的錯誤。 –

0

對於初學者,我認爲你的觀點應該是這樣的,所以你只有在有些時候纔會通過票證。

@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