Laravel 不同用户类型使用相同的控制器

Laravel Same Controller for Different User Types

我有两种用户类型:教师和学生

学生路线是:

GET /me/books

学生们应该只有他们的书作为回应。

教师路线是:

GET /books

老师应该有所有学生的书作为回应。

我有一个模型:Book 和一个控制器:BookController。在这种情况下编写 BookController@index 方法的最佳方法是什么?在 index 方法中为用户类型使用 switch case 听起来不像是最佳实践。

您甚至可以保持路线不变。只用老师和学生的角色。

如果您不想实现角色,您可以只在用户 table 上有一列,类型为教师或学生。

然后当请求到达控制器方法时,根据用户的类型,您可以编写查询以获取教师的所有书籍,或者仅获取分配给学生的用户的书籍。

public function index()
{
    $user = auth()->user();
    $query = Book::query();

    if($user->type === 'student') {
        $query->where(/*some condition to constrain the records*/);

        //Or if you have a relation to fetch books for the user
        $query = User::query()->with('books');

    }

    $books = $query->get();

    //return json response for ajax request or a view
}

你好朋友你可以如下用户关系或查询

public function getStudentBook() //get the student book
{
    $user = auth()->user();
   
    if($user->role == 'student') { //assuming role column has student or teacher value
       
      //assuming user_books as pivot table for users and book table
      $books = Book::join('user_books', 'user_books.student_id', '=', 'users.id')
            ->where('user_books.student_id', '=', $user->id)
            ->groupBy(user_books.book_id)
            ->get();
 
    }

}

public function getStudenstBook() //get the students book of teacher
{
    $user = auth()->user();
   
    if($user->role == 'teacher') { //assuming role column has student or teacher value
      
      //assuming student_teacher table as as pivot table for teacher student table
      $student_ids = DB::table('student_teacher')->where('teacher_id' , '=', $user->id)
                     ->grouBy('student_teacher.student_ids')->pluck('student_ids')->toArray();

      //assuming user_books as pivot table for users and book table
      $books = Book::join('user_books', 'user_books.student_id', '=', 'users.id')
            ->whereIn('user_books.student_id',  $student_ids)
            ->groupBy(user_books.book_id)
            ->get();
 
    }

}

如有任何疑问,请随时发表评论。谢谢,祝你有美好的一天