我很难克服这个问题。尝试按ID显示数据库中的单个项目。我设置了控制器和路由,但没有成功。我在show.blade上所做的更改导致错误或没有数据
这是我的整个控制者:
public function welcome()
{
$estates = array();//here
$data['estates'] = $estates;
return view('welcome', $data);
}
public function search(Request $request)
{
$q = $request->q;
$estates = \DB::table('allestates')
->where("building_name", "LIKE", "%" . $q . "%")
->orWhere("address", "LIKE", "%" . $q . "%")
->orWhere("company_name", "LIKE", "%" . $q . "%")
->orWhere("region", "LIKE", "%" . $q . "%")
->orderBy('price')->paginate(10);
return view("search", compact('estates', 'q'));
}
public function show(allestates $allestates)
{
$estates = allestates::where('id', $allestates->id)->first();
//dd($estates);
if($estates){
return view('pages.show', ['estates' => $estates]);
}else{
return 'no records found';
}
}
显示功能一定是问题所在,但是我不知道是什么问题。
这是路线:
Route::get("/", "PagesController@welcome");
Route::any("/search", "PagesController@search")->name('search.route');
Route::get('pages/{id}', 'PagesController@show');
这是show.blade。
<tbody>
<tr class="even">
<td>{{$estates->building_name}}</td>
</tr>
</tbody>
这是main.blade:
@foreach($estates as $estate)
<tr class="even">
<td>{{str_limit($estate->company_name, $limit = 20)}}</td>
<td><a href="/pages/{{$estate->id}}">{{str_limit($estate->building_name, $limit = 20)}}</a></td>
<td>{{str_limit($estate->address, $limit = 22)}}</td>
<td>{{str_limit($estate->price, $limit = 20)}}</td>
<td class="price-hidden">{{$estate->old_price}}</td>
<td>{{str_limit($estate->extend, $limit = 20)}}</td>
<td>{{str_limit($estate->rooms, $limit = 20)}}</td>
<td>{{str_limit($estate->entry, $limit = 20)}}</td>
</tr>
@endforeach
ID返回null。但是有ID!
答案 0 :(得分:1)
这是因为laravel找不到与您的查询匹配的记录。
尝试使用findOrFail
查询单个记录。如果找不到记录,将返回错误。
$estates = allestates::findOrFail($id);
另一种方法是检查查询是否成功:
public function show($id)
{
$estates = allestates::where('id', $id)->first();
if($estates){
return view('pages.show', ['estates' => $estates]);
}else{
return 'no records found';
}
}
EXPLANATION
$id
中的public function show($id)
参数在路由{id}
中使用Route::get('pages/{id}', 'PagesController@show');
参数
laravel将基于您在id
中放置的yoursite.com/pages/{id}
搜索数据库