2017-12-27 157 views
5

Vì vậy, đây là bộ điều khiển của tôi:Tại sao lặp lại để lấy dữ liệu sau khi sử dụng WHERE trong 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); 

Và đây là đoạn code để tạo URL:

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

Nhưng nếu tôi bỏ vòng lặp foreach, nó được đưa ra lỗi:

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

Nhưng tại sao, tôi phải lặp lại, nếu nó chỉ nhận được một hàng từ bảng bảng ?? Bất kỳ giải pháp làm điều đó mà không cần chạy cho mỗi vòng lặp ???

Trả lời

4

Vì bạn muốn chỉ nhận một đối tượng, bạn không cần to use get() to get a collection. Sử dụng find() để có được một đối tượng bằng cách đó là khóa chính:

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

Trong giao diện bạn không cần phải sử dụng @foreach loop:

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

Vâng, đó là làm việc. Cảm ơn một lần nữa. –

+1

thay thế bạn có thể sử dụng đầu tiên() hoặc lấy (1) –

2

Bạn có thể sử dụng Boards::find($id); hoặc Boards::findOrFail($id); insted của Boards::where('id', $id)->get(); để có được một hàng duy nhất.Cũng sử dụng

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

đến

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

becouse đi qua giá trị bình thường để xem sử dụng phiên không phải là một thực hành tốt

+0

và cũng thay đổi href = "{{route ('routeName', ['id' => $ user-> id]))}}", là tốt nhất thực hành trong laravel –

Các vấn đề liên quan