ArgumentCountError Слишком мало аргументов для функции Laravel невозможно извлечь данные из БД и отобразить

#php #laravel

#php #laravel

Вопрос:

Я работаю в Laravel 7, извлекаю данные из своей БД и показываю ученику его / ее оценку на странице оценки в процентах с помощью следующих кодов. В моем StudentOperationController.php

 public function show_result($id) {
        $data['result_info'] = Oex_result::where('id', $id)->get()->first();
        $data['student_info'] = Oex_students::select(['oex_students.*', 'oex_exam_masters.title', 'oex_exam_masters.exam_date'])->join('oex_exam_masters', 'oex_students.exam', '=', 'oex_exam_masters.id')->where('oex_students.id', Session::get('id'))->get()->first();
        return view('student.show_result', $data);
    }
  

и в моем show_result.blade.php

 <h2>Result Information</h2>
   <table class="table">
         <tr>
             <td>Number Correct</td>
             <td>{{ $result_info->yes_ans }}</td>
          </tr>
           <tr>
              <td>Number Incorrect</td>
              <td>{{ $result_info->no_ans }}</td>
           </tr>
           <tr>
              <td>Total</td>
              <td>{{ round($result_info->yes_ans / ($result_info->yes_ans   $result_info->no_ans) * 100 , 1) }} %</td>
            </tr>
          </table>
  

Причина, по которой я показываю это, заключается в том, что он работает так, как ожидалось. это находится на панели управления студентами. В моем администраторе я пытаюсь сделать то же самое и показать, что учащиеся получают данные для его / ее результата экзамена. В моей базе данных у меня есть данные типа json, например: {"2":"YES","3":"YES","8":"YES"} . Я все еще изучаю Laravel и застрял на том, как передать эти данные моему администратору. Я явно делаю что-то не так и нуждаюсь в помощи. Вот что я пробовал:
AdminController.php

 public function manage_students($id)
    {
        $data['result_info'] = Oex_result::where('id', $id)->get()->first();
        // dd($data);
        $data['student_info'] = Oex_students::select(['oex_students.*', 'oex_exam_masters.title', 'oex_exam_masters.exam_date'])->join('oex_exam_masters', 'oex_students.exam', '=', 'oex_exam_masters.id')->where('oex_students.id', Session::get('id'))->get()->first();
        $data['exams'] = Oex_exam_master::where('status', '1')->get()->toArray();
        $data['students'] = Oex_students::select(['oex_students.*', 'oex_exam_masters.title as exam_name'])
            ->join('oex_exam_masters', 'oex_students.exam', '=', 'oex_exam_masters.id')
            ->get()->toArray();

        return view('admin.manage_students', $data);
    }
  

и в моем manage_students.blade.php , У меня есть

 <tbody>
   @foreach($students as $key => $student)
   <tr>
     <td>{{ $key 1 }}</td>
     <td>{{ $student['name'] }}</td>
     <td>{{ $student['email'] }}</td>
     <td>{{ $student['mobile_no'] }}</td>
     <td>{{ $student['exam_name'] }}</td>
     {{-- <td>N/A</td> --}}
     <td>{{ round($result_info->yes_ans / ($result_info->yes_ans   $result_info->no_ans) * 100 , 1) }} % </td>
     @if($student['status']== 1)
         <td><input data-id="{{ $student['id'] }}" class="student_status" type="checkbox" name="status" checked></td>
     @else
         <td><input data-id="{{ $student['id'] }}" class="student_status" type="checkbox" name="status"></td>
     @endif
         <td>
           <a href="{{ url('admin/edit_student/'. $student['id']) }}" class="btn btn-primary btn-sm">Edit</a>
           <a href="{{ url('admin/delete_student/' . $student['id']) }}" class="btn btn-danger btn-sm">Delete</a>
          </td>
        </tr>
     @endforeach
</tbody>
  

При этом я получаю сообщение об ошибке Too Few arguments to function ... 0 passed and exactly 1 expected
Я не могу воспроизвести то, что у меня есть для панели управления учащимися, и из-за недостатка знаний Laravel у меня возникают проблемы с решением этой проблемы. Итак, любая помощь будет с благодарностью принята. Если я что-то упустил, пожалуйста, дайте мне знать, чтобы я мог отредактировать свой вопрос. Заранее спасибо.

Редактировать: маршрут manage_students:

 Route::get('admin/manage_students', 'AdminController@manage_students');
  

Редактировать номер 2:

 Too few arguments to function AppHttpControllersAdminController::manage_students(), 0 passed and exactly 1 expected
C:laragonwwwlionsfieldtestappHttpControllersAdminController.php:146
  

Ссылка на эту строку:

  public function manage_students($id)
  

Редактировать номер 3:
в resources/views/layouts/app.blade.php

 <li class="nav-item">
   <a href="{{ url('admin/manage_students') }}" class="nav-link">
     <i class="nav-icon fas fa-school"></i>
   <p>
      Student Management
   </p>
  </a>
</li>
  

Редактировать номер 4:
Изображение, показывающее данные экзамена от разных студентов
Страница manage_student содержит данные из результатов экзаменов нескольких студентов

Комментарии:

1. @lagbox Спасибо. Я отредактировал свой вопрос, чтобы включить всю ошибку.

2. идентификатор таблицы oex_result, который в данном случае идентификатор oex_result-> id = 2

3. откуда вы ожидаете, что это произойдет? поскольку для этого маршрута не определен параметр маршрута

4. Да, и это именно то, где я застрял. Если я добавлю /{id} к маршруту, вся страница выдает 404, так что, как я уже сказал, моя неопытность не помогает

5. Я посмотрю, что я могу придумать, и буду держать вас в курсе. Спасибо @lagbox.

Ответ №1:

Эта функция запрашивает $id;

public function manage_students($id)

Этот маршрут не проходит ни одного

Route::get('admin/manage_students', 'AdminController@manage_students');

Как я вижу, вы фильтруете по результатам, которые в этом случае вам нужны $result id

Route::get('admin/manage_student/{id}', 'AdminController@manage_students');

Итак, вам нужно передать идентификатор результата, но давайте предположим, что есть идентификатор результатов по умолчанию

public function manage_students($id=2)

тогда этот маршрут работает, потому что $id является необязательным / предопределенным. Route::get('admin/manage_students', 'AdminController@manage_students');

И если вы передадите идентификатор, он будет использовать

Route::get('admin/manage_student/{id}', 'AdminController@manage_students');


Создайте 2 маршрута и сделайте параметр необязательным / предопределенным.

если вы перейдете в /admin/manage_student, он будет использовать идентификатор 2, но если вы передадите /admin/manage_student/5, он будет использовать 5