我正在使用Laravel 5.6。我正在尝试从grading_info
表中查询信息,但我也想从student_info
表中返回学生姓名和其他信息。我只想返回grading_info
表中与当前登录的老师相关的记录。当前其返回的信息适用于所有教师。我知道我可以添加一个where
子句,但是我试图学习口才好,并且想知道是否有任何方法可以做到这一点?
grading_info
表中的师生可以有很多输入,并且任何老师都可以为任何学生评分。
我想返回这样的东西
{
gradeID,
gradeDate,
gradeInfo
.....
student: {
studentName,
studentPhoneNumber,
studentEmail
......
}
}
用户表(仅存储教师,不存储学生)
teacher_info
student_info
grading_info
用户模型
public function grades(){
return $this->hasMany(GradingInfo::class, 'studentID');
}
GradingInfo模型
public function teacher(){
return $this->belongsTo(User::class, 'id', 'teacherID');
}
public function student() {
return $this->belongsTo(StudentInfo::class, 'studentID', 'id');
}
StudentInfo模型
public function grades() {
return $this->hasMany(SessionInfo::class, 'studentID', 'id');
}
TeacherInfo模型
// Nothing in here.
TeacherController
public function getGrades(Request $request)
{
$user = Auth::user(); // This is the teacher
$grades = $user->with('sessions.student')->orderBy('created_at', 'DESC')->get();
return response()->json(['sessions' => $sessions], 200);
}
答案 0 :(得分:1)
您在Many to Many
和user(teacher)
之间拥有student(student_info) tables
关系
用户模型
public function gradeStudents(){
return $this->belongsToMany(StudentInfo::class, 'grading_info', 'teacherID', 'studentID');
}
public function info(){ //get teacher info
return $this->hasOne(TeacherInfo::class, 'teacherID');
}
StudentInfo模型
public function gradeTeachers(){
return $this->belongsToMany(User::class, 'grading_info', 'studentID', 'teacherID');
}
现在获取数据(TeacherController)
public function getGrades(Request $request)
{
$user = Auth::user(); // This is the teacher
$students = $user->gradeStudents; // it will return all graded students by logged in teacher
return response()->json(['students' => $students], 200);
}
此处grading_info
是用于多对多关系的数据透视表
有关详细信息,请检查此https://laravel.com/docs/5.6/eloquent-relationships#many-to-many
从数据透视表中获取其他信息
如果您想在数据透视表(grading_info
)中添加额外的信息,则在此表中添加列(info
),然后需要像这样更改关系
public function gradeStudents(){
return $this->belongsToMany(StudentInfo::class, 'grading_info', 'teacherID', 'studentID')
->withPivot('info')
->as('grade')
->withTimestamps();
}
现在,如果您获取数据
$user = Auth::user(); // This is the teacher
$students = $user->gradeStudents;
foreach($students as $student){
print_r($student);
print_r($student->grade->info);
print_r($student->grade->created_at);
}
答案 1 :(得分:0)
您应该使用hasOne,hasMany在模型中定义关系。 像这样的东西:
JSON.parse(myArray).name