Отображение одной записи из базы данных в laravel

У меня есть два метода в моем callsController, Первый называется newCall и он отображает все записи из таблицы БД, это выглядит так:

public function newCall(){

$new_calls = new_calls::all();     //fetches everything in the new_calls table in the database
return view('calls.newCall')->with('new_calls', $new_calls);     //passes it to the view
}

Эта функция работает хорошо, и все записи, на мой взгляд, успешно получены.

Вопрос со вторым методом viewCall чья цель — показать данные для одного call когда его имя выбирается из списка newCalls,

В настоящее время у меня есть только это:

public function viewCall(){
return view('calls.viewCall');
}

Я планирую отформатировать данные из базы данных (для определенного вызова) со статическим текстом, отображая его в моем viewCall.blade.php,

Я не был уверен, что поместить в web.php, поэтому мои маршруты выглядят так:

Route::get('/calls/newCall', 'CallsController@newCall');
Route::get('/calls/viewCall/{id}', 'CallsController@viewCall')->name('viewCall');

Может кто-нибудь помочь мне сделать эту работу? Я просто хочу увидеть ассоциативный массив с записью из базы данных, когда я нажимаю на имя вызова. Что мне нужно добавить в маршруты и на мой взгляд?

Это мое newCall.blade.php

<div class="table-responsive">
<table class="table no-margin table-striped">
<thead>
<tr>
<th>Terminal ID</th>
<th>Terminal Name</th>
{{-- <th>Fault Description</th> --}}
<th>Call Logged On</th>
<th>ATM Variant</th>
</tr>
</thead>
<tbody>
@if(count($new_calls) > 0)
@foreach($new_calls as $calls)
<tr>
<td><a href="/calls/viewCall/{{$calls->id}}" title="view more details">{{$calls->terminal_id}}</a></td>
<td>{{$calls->terminal_name}}</td>
{{-- <td style="width:350px">{{$calls->fault_description}}</td> --}}
<td>{{$calls->created_at}}</td>
<td>{{$calls->atm_variant}}</td>
</tr>
@endforeach
@else
<h1>No new Calls</h1>
@endif
</tbody>
</table>
</div>

Это мое viewCall.blade.php

<address>
<strong>{{$new_call->client_name}}</strong><br>
{{$new_call->address}}<br>
<b>Phone: {{$new_call->phone}}</b> <br>
<b>Email: {{$new_call->email}}</b>
</address>

нб: я также пытался использовать {{$calls->email}} но он возвращает неопределенную переменную: звонки и new_calls в каждом случае

2

Решение

Что вам нужно сделать, это получить new_calls модель по ID, Что вы можете сделать так:

маршруты / web.php

Route::get('/calls/viewCall/{id}', 'CallsController@viewCall');

CallsController.php

public function viewCall($id) // the id in the url
{
$new_call = new_calls::find($id);

return view('calls.viewCall')->with('new_call', $new_call);
}

По вашему мнению (я предполагаю, что вы просматриваете все вызовы, чтобы отобразить их) создайте ссылку.

// your existing foreach
@foreach($x as $y)
<a href="/calls/viewCall/{{$y->id}}">View Call</a>
@endforeach
0

Другие решения

Вы можете сделать что-то вроде этого:

public function viewCall($id)
{
return view('calls.viewCall', ['call' => new_calls::findOrFail($id)]);
}

Это получит id из маршрута и вызвать функцию, чтобы найти объект с заданным id,

Если у вас есть проблемы, чтобы иметь дело с переменной в представлении. Попробуйте проверить объект с помощью dd, Попробуй это:

public function viewCall($id)
{
$new_call = new_calls::find($id);
dd($new_call);
}

Ref: https://laravel.com/docs/5.7/controllers#basic-controllers

1

Я также рекомендую посмотреть на соглашения об именах, привязку модели маршрута и подсказку типа в контроллере.
Тогда у вас будет что-то вроде этого:

    public function viewCall(NewCall $newcall)
{
return view('calls.viewCall')->with($newcall);
}

и маршрут будет таким:

Route::get('/calls/viewCall/{newcall}', 'CallsController@viewCall')->name('viewCall');
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector