首页 > 解决方案 > Laravel - 如何批准特定员工的所有帖子

问题描述

使用 Laravel-5.8,我为员工职位编写了一个代码,它运行良好:

控制器

public function index()
{
    $userEmployee = Auth::user()->employee_id;
    $posts = Post::latest()->where('employee_id', $userEmployee)->get();

    return view('admin.post.index', compact('posts'));
}

它会生成如下所示的视图。该视图会加载特定员工的所有未批准帖子:

<table class="table table-bordered table-striped table-hover dataTable js-exportable">
  <thead>
    <tr>
      <th>ID</th>
      <th>Title</th>
      <th>Author</th>
      <th><i class="material-icons">visibility</i></th>
      <th>Is Approved</th>
      <th>Status</th>
      <th>Action</th>
   </tr>
  </thead>
  <tbody>
    @foreach($posts as $key=>$post)
     <tr>
       <td>{{ $key + 1 }}</td>
       <td>{{ str_limit($post->title,'10') }}</td>
       <td>{{ $post->user->name }}</td>
       <td>{{ $post->view_count }}</td>
       <td>
         @if($post->is_approved == true)
            <span class="badge bg-blue">Approved</span>
         @else
            <span class="badge bg-pink">Pending</span>
         @endif
       </td>
       <td>
          @if($post->status == true)
             <span class="badge bg-blue">Published</span>
          @else
             <span class="badge bg-pink">Pending</span>
          @endif
        </td>
       </tr>
         @endforeach
  </tbody>

<form action="{{route('admin.post.approve', $post->id)}}" method="POST" enctype="multipart/form-data">
    @csrf
    @method('PUT')
    <div>
        <button type="submit" class="btn btn-primary"><i class="fas fa-arrow-right"></i> {{ trans('global.submit') }}</button>
    </div> 
</form> 

我想向名为approve 的视图添加一个提交按钮。单击按钮后,它会检查已加载员工的 is_approved 为 = 0 的位置,并将与员工(已加载)数据相关的所有 is_approved 变为 1。

我已经在同一个控制器中编写了这个函数,但我发现它只适用于选定的行:

public function approve($id){

    $post = Post::find($id);
    if ($post->is_approved == false){
        $post->is_approved = true;
        $post->save();
        $post->user->notify(new AuthorPostApprove($post));

        Toastr::success('Post Successfully Approved');
    }else{
        Toastr::info('Post is already Approved');
    }

    return redirect()->back();
}

并有这条路线/web.php

Route::get('posts/', 'PostController@index')->name('post.index');
Route::put('/post/{id}/approve', 'PostController@approve')->name('post.approve');

我如何重写我的控制器、视图和路由来实现这一点?

谢谢你。

标签: laravel

解决方案


试试这个:

public function approve($id){

 $post = Post::where('employee_id', $id)
      ->where('is_approved', 0)
      ->update(['is_approved' => 1]);

if ($post){
    $post->user->notify(new AuthorPostApprove($post));
    Toastr::success('Post Successfully Approved');
} else {
    Toastr::info('Post is already Approved');
}

return redirect()->back();

}

推荐阅读