Отображение одного элемента в Laravel - PullRequest
0 голосов
/ 19 октября 2018

Мне тяжело пережить это.Попробуйте отобразить один элемент по идентификатору из базы данных.Я установил контроллер и маршрут, но не смог сделать это.Получение ошибки или отсутствие данных из-за изменений, которые я делаю в моем 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';
    }
}

Функция Show должна быть проблемой, но в чем проблемаЯ не мог понять это.

Это маршрут:

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

Идентификатор, возвращающий ноль.но есть идентификатор!

1 Ответ

0 голосов
/ 19 октября 2018

потому что 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}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...