php - 在 Laravel 中显示单个项目
问题描述
我很难克服这一点。尝试从数据库中按 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 返回空值。但是有身份证!
解决方案
这是因为 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';
}
}
解释
$id
里面的参数public function show($id)
使用{id}
你的路由中的参数Route::get('pages/{id}', 'PagesController@show');
laravel 将根据id
您放置的内容搜索数据库yoursite.com/pages/{id}
推荐阅读
- ios - 如何使多个协议符合一个类并设计方法来输入和打印详细信息?
- java - 如何在 GraphQL 中使用参数列表创建查询?
- javascript - 如何让机器人回复表情符号?
- html - 按索引删除不起作用。角
- if-statement - If语句具有多个agruments来捕获鼠标位置
- mysql - sql-query 获取包含事务计数的报告
- django - django 使用自定义公司字段创建个人资料
- docplex - Docplex:构建表达式以从数组中获取值
- django - 使用 Docker 在本地运行 Django/Gunicorn 应用程序失败并显示 ERR_CONNECTION_REFUSED
- java - 将每个子字符串存储到不同的变量中