Отображение одной записи из базы данных в 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>

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

Проверьте мой ответ ниже и скажите, работает он для вас или нет.

rpm192 10.11.2018 11:56

Добавьте ваши файлы newcall.blade.php и viewcall.blade.php, и я посмотрю на них.

rpm192 11.11.2018 12:54

Вы обновили функцию viewCall, как показано в моем ответе ниже?

rpm192 11.11.2018 17:48

да ... пожалуйста, просмотрите обновленную версию моего сообщения .. Я включил свой оператор foreach .. я все еще получаю сообщение об ошибке undefined variable calls

Austin 12.11.2018 09:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
4
1 996
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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);
}

Ссылка: https://laravel.com/docs/5.7/controllers#basic-controllers

там нет ничего, кроме кодов HTML и CSS, но все они импортируются как верхние и нижние колонтитулы

Austin 09.11.2018 16:48

Я надеялся просмотреть данные в необработанном состоянии, то есть в массиве, чтобы я мог настроить представление

Austin 09.11.2018 16:56

Переменная, которая будет отправлена ​​в viewCall, - это $call. В представлении вы можете получить атрибуты из этой переменной. Я отредактировал свой ответ отладочным кодом. Попробуйте проверить, правильно ли напечатан $ new_call.

Laerte 09.11.2018 17:31

он вернул следующие new_calls {# 234 ▼ #fillable: array: 6 [▶] #table: "new_calls" #connection: "mysql" #primaryKey: "id" #keyType: "int" + incrementing: true #with: [ ] #withCount: [] #perPage: 15 + exists: true + wasRecentlyCreated: false #attributes: array: 10 [▶] #original: array: 10 [▶] #changes: [] #casts: [] #dates: [ ] #dateFormat: null #appends: [] #dispatchesEvents: [] #observables: [] ... и другие}, но я хочу, чтобы он возвращал информацию о вызове, который я щелкнул в массиве

Austin 09.11.2018 17:54

спасибо ... Я сделал несколько ошибок в своих именах переменных и исправил их ... мой код теперь работает .... большое спасибо ... я очень признателен

Austin 12.11.2018 10:02

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

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

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

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

спасибо за ответ, но там написано: «Класс App \ Http \ Controllers \ NewCall не существует»

Austin 09.11.2018 16:45

Итак, где вы это сделали: $ new_call = new_calls :: find ($ id); new_calls - это ваш класс. Это плохое соглашение об именах. Ваша модель new_calls должна быть единственной. Думайте о модели как о 1 строке в БД. new_call :: allI () = все строки. new_fall :: find ($ id) == 1 строка. Я бы изменил свою модель на NewCall, но поскольку вы уже сделали это, вы уже можете сделать это: Открытая функция viewCall (new_calls, $ newcall) {return view ('calls.viewCall') -> with ($ newcall); }. Теперь вы намекаете, что $ newcall является экземпляром new_call. Это красноречиво.

Brad Goldsmith 10.11.2018 20:35

спасибо ... Я сделал несколько ошибок в своих именах переменных и исправил их ... мой код теперь работает .... большое спасибо ... я очень признателен

Austin 12.11.2018 10:02

@ Остин. На самом деле прочтите эти документы по laravel. Привязка модели маршрута и подсказка типа очень важны и помогают сохранить код чистым / читаемым, что будет иметь большое значение. Удачи тебе с твоим проектом.

Brad Goldsmith 12.11.2018 15:48
Ответ принят как подходящий

Что вам нужно сделать, так это получить модель 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

Вот что делает return view('calls.viewCall')->with('new_call', $new_call);. По вашему мнению, вы можете получить доступ к вызову следующим образом: $new_call с любыми свойствами.

rpm192 10.11.2018 17:53

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

rpm192 10.11.2018 17:55

Я попробовал <small class = "pull-right">Call logged on: {{$new_call->created_at}} </small> и получил ошибку undefined variable new_call

Austin 10.11.2018 17:58

Вам следует использовать {{$new_call->created_at}}. Поскольку свойства передаются в представление как $new_call

rpm192 10.11.2018 17:58

Пожалуйста, добавьте все соответствующие просмотры в свой пост: viewcall.blade.php и тот, в котором у вас есть все звонки.

rpm192 10.11.2018 18:02

Другой вид, который мне нужно исправить, - это newcall.blade.php.

rpm192 10.11.2018 18:23

Я только что добавил просмотры ... пожалуйста, проверьте сообщение

Austin 11.11.2018 17:15

спасибо ... Я сделал несколько ошибок в своих именах переменных и исправил их ... мой код теперь работает .... большое спасибо ... я очень признателен

Austin 12.11.2018 10:02

Другие вопросы по теме