У меня есть два метода в моем 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 в каждом случае
Что вам нужно сделать, это получить 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
Вы можете сделать что-то вроде этого:
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
Я также рекомендую посмотреть на соглашения об именах, привязку модели маршрута и подсказку типа в контроллере.
Тогда у вас будет что-то вроде этого:
public function viewCall(NewCall $newcall)
{
return view('calls.viewCall')->with($newcall);
}
и маршрут будет таким:
Route::get('/calls/viewCall/{newcall}', 'CallsController@viewCall')->name('viewCall');