在Laravel中显示单个项目

时间:2018-10-19 02:45:48

标签: php laravel laravel-5

我很难克服这个问题。尝试按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!

1 个答案:

答案 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}搜索数据库