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方法的代码。