2017-12-27 193 views
5

Tak, tu jest mój kontroler:Po co zapętlać dane po użyciu WHERE w Laravel?

$topics = Topic::where('board_id', $id)->with('user')->get(); 
$topic = Topic::find($id); 
$board = Boards::where('id', $id)->get(); 
return view('boards.show')->with('topics', $topics)->with('topic', $topic)->with('board', $board); 

A oto kod do generowania adresów URL:

@foreach($board as $boards) 
<a href="/topics/create/{{$boards->id}}">Create New Post</a> 
<p>No Posts Found</p> 
@endforeach 

Ale jeśli jestem usunięcie pętli foreach, to daje błąd:

Property [id] does not exist on this collection instance. 

Ale dlaczego, muszę pętli, jeśli jest tylko jeden wiersz z tabeli desek? Jakieś rozwiązanie tego bez uruchamiania dla każdej pętli ???

Odpowiedz

4

Ponieważ chcesz uzyskać tylko jeden obiekt, nie potrzebujesz to use get() to get a collection. Użyj find() aby uzyskać obiekt przez nią jest klucz podstawowy:

$board = Boards::find($id); 

W widoku nie trzeba używać @foreach pętlę:

<a href="/topics/create/{{ $board->id }}">Create New Post</a> 
+2

Tak, że pracował. Dzięki jeszcze raz. –

+1

alternatywnie możesz użyć first() lub take (1) –

2

Można użyć Boards::find($id); lub Boards::findOrFail($id); insted Boards::where('id', $id)->get(); dla coraz pojedyncze row.Also używać

return view('boards.show')->with('topics', $topics)->with('topic', $topic)->with('board', $board); 

do

return view('boards.show',[ 
    'topics'=> $topics, 
    'topic'=> $topic, 
    'board'=> $board 
]); 

poniewaz przechodząc normalne wartości, aby wyświetlić przy użyciu sesji nie jest dobrą praktyką

+0

, a także zmienić href = "{{route (" routeName ", ['id' => $ user-> id]))}}", co jest najlepsze ćwiczyć w laravel –