Php Laravel为不同的用户类型提供相同的控制器

Php Laravel为不同的用户类型提供相同的控制器,php,laravel,laravel-controller,Php,Laravel,Laravel Controller,我有两种用户类型:教师和学生 对于学生来说,路线是: GET /me/books GET /books 学生们应该只拿他们的书作为回应 对于教师来说,路线是: GET /me/books GET /books 老师应该让所有学生的书都做出回应 我有一个型号:Book和一个控制器:BookController。编写BookController@index这种情况下的方法?在索引方法中为用户类型使用开关盒听起来不是最佳做法。您甚至可以保持路由不变。只需使用教师和学生的角色 如果您不想实现角色

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

对于学生来说,路线是:

GET /me/books
GET /books
学生们应该只拿他们的书作为回应

对于教师来说,路线是:

GET /me/books
GET /books
老师应该让所有学生的书都做出回应


我有一个型号:
Book
和一个控制器:
BookController
。编写
BookController@index
这种情况下的方法?在索引方法中为用户类型使用开关盒听起来不是最佳做法。

您甚至可以保持路由不变。只需使用教师和学生的角色

如果您不想实现角色,您可以在users表中为类型(即教师或学生)设置一列

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

公共功能索引()
{
$user=auth()->user();
$query=Book::query();
如果($user->type==='student'){
$query->where(/*约束记录的某些条件*/);
//或者,如果您与用户有关系,则可以为用户取书
$query=User::query()->带('books');
}
$books=$query->get();
//返回ajax请求或视图的json响应
}

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

如果您不想实现角色,您可以在users表中为类型(即教师或学生)设置一列

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

公共功能索引()
{
$user=auth()->user();
$query=Book::query();
如果($user->type==='student'){
$query->where(/*约束记录的某些条件*/);
//或者,如果您与用户有关系,则可以为用户取书
$query=User::query()->带('books');
}
$books=$query->get();
//返回ajax请求或视图的json响应
}

你好,朋友,您可以按如下方式建立用户关系或查询

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

}

如果有任何疑问,请随时发表评论。谢谢你,祝你有一个愉快的一天

你好,朋友。你可以按以下方式建立用户关系或查询

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

}

如果有任何疑问,请随时发表评论。谢谢,祝您有愉快的一天

我个人的意见是,使用同一个控制器处理两个资源所节省的时间/空间不值得在调试时让人头痛。通过在不同的命名空间中创建两个不同的
BookController
s,我选择了“更干净”和更易于调试的方法。共享索引方法的代码。我个人的观点是,使用同一控制器处理两个资源所节省的时间/空间不值得在调试时头痛。通过在不同的命名空间中创建两个不同的
BookController
s,我选择了“更干净”和更容易调试的方法。共享index方法的代码。