首页 > 解决方案 > 在 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 返回空值。但是有身份证!

标签: phplaravellaravel-5

解决方案


这是因为 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}


推荐阅读