首页 > 解决方案 > 当管理员在我的视图中批准时,我应该如何显示数据

问题描述

我是 laravel 的新手,我正在创建候选人批准/拒绝。现在我正在争取批准。我有“general.blade.php”,其中显示了所有待处理的列表。然后当管理员批准选定的候选人时,它会将数据传递给我称为“Approved.blade.php”的新刀片。但是,就我而言。当我单击一个候选人时,它会将所有候选人列表传递给新刀片,无论是待定还是批准。

候选控制器.php

public function postApprove($id)
 {
    $candidates = GeneralForm::where('id', '=', e($id))->first();
    if($candidates)
    {
        $candidates->status = 1;
        $candidates->save();
        $candidates=GeneralForm::where('status' , '1')->get();
        $menu = Menu::get();
        $current_menu = 2;
        $candidates = GeneralForm::latest()->paginate(5);
        return view('approve', compact('candidates', 'menu', 'current_menu'));}

general.blade.php *这是我的按钮,管理员可以在其中批准候选人 *

 <a class="flex items-center " href="{{route('application',['id'=>$candidate->id])}}"> <i data-feather="user-check" class="w-4 h-4 mr-1"></i> Accept </a>

我应该在这里只显示批准候选人 approve.blade.php

        <tbody>@foreach ($candidates as $candidate)
            <tr class="intro-x">
                <td class="w-40">
                    <div class="font-medium whitespace-no-wrap">{{ $candidate->fullname }}</div> 
                </td>
                <td class="w-40">
                    <div class="font-medium whitespace-no-wrap">{{ $candidate->email }}</div> 
                </td> </tbody>@endforeach

路线

Route::get('application/approve/{id}', 'CandidateController@postApprove')->name('application');

我得到的是,每当我点击一个候选人时,它都会将我重定向到approval.blade.php。但是它向我显示了包括待处理的整个列表。我希望它只显示批准候选人。我的数据库数据工作正常,只有我的观点不是。有人可以帮我哪一部分是错的吗?

标签: phplaravel

解决方案


您将有 5 名候选人使用$candidates = GeneralForm::latest()->paginate(5);该数据并将其传递给您的视图。由于您只需要一个候选人,您应该按如下方式更新您的代码:

public function postApprove($id)
{
    $candidate = GeneralForm::find($id);
    $candidate->status = 1;
    $candidate->save();
    $menu = Menu::get();
    $current_menu = 2;
 
    return view('approve', compact('candidate', 'menu', 'current_menu'));
}
  • GeneralForm::where('id', '=', e($id))->first();可以缩短为GeneralForm::find($id)
  • 删除该行$candidates=GeneralForm::where('status' , '1')->get();,因为这将为您提供候选人列表,并且无论如何都会被覆盖$candidates = GeneralForm::latest()->paginate(5);
  • 重命名$candidates$candidate反映只有一项

然后在您看来,您可以摆脱,@foreach...因为我们只有一项要显示:

<tbody>
  <tr class="intro-x">
    <td class="w-40">
      <div class="font-medium whitespace-no-wrap">{{ $candidate->fullname }}</div> 
    </td>
    <td class="w-40">
      <div class="font-medium whitespace-no-wrap">{{ $candidate->email }}</div> 
    </td>
  </tr>
</tbody>
  • 删除了,@foreach因为我们只有一项要显示

推荐阅读