我有一个用户,学生和学科模型,我想将学生注册到许多科目。 所以我创建了一个StudentRegistration控制器,在我的创建视图中,我显示了属于当前登录用户的所有主题。
StudentRegistration.php创建功能
public function create()
{
$user_id = Auth::user()->id;
$student_id = Student::where('user_id', $user_id)->first();
$course = $student_id->course->id;
$subjects = Subject::where('course_id', $course)->get();
return view('student.create', compact('subjects'));
}
在创建模板中,我将所有主题显示为复选框,因为用户可以注册多个主题。
{!! Form::open(['method' => 'POST', 'action'=>'StudentRegistration@store', 'files'=>true]) !!}
@foreach($subjects as $subject)
<div class="label-box">
{!! Form::label('name', $subject->name) !!}
{!! Form::checkbox('subject_id[]', $subject->id, null, ['class'=>'form-control']) !!}
</div>
@endforeach
<div class="form-group">
{!! Form::submit('Create User', ['class'=>'btn btn-primary']) !!}
</div>
{!! Form::close() !!}
我在Student.php中有这个与多对多的关系:
public function subjects()
{
return $this->belongsToMany('App\Subject');
}
我创建了一个名为Student_Subject的数据透视表。 因此,在商店期间,如何将所有选定的主题保存到数据透视表(student_subject)中。
我试过用这个:
public function store(Request $request)
{
$data = $request->except('_token');
$subject_count = count($data['subject_id']);
for($i=0; $i < $subject_count; $i++){
$student = Student::where('user_id', Auth::user()->id);
$student->subjects()->attach($data['subject_id'][$i]);
}
}
但是我收到以下错误:
"Method Illuminate\Database\Query\Builder::subjects does not exist."
如何查看学生未注册的所有课程科目?
我有这个:
Route::get('/studentsubjects', function(){
$student_id = Student::where('user_id', Auth::id())->first();
$course = $student_id->course->id;
$subjects = $student_id->subjects;
echo 'Registered at' .'<br>';
foreach ($subjects as $registered) {
echo $registered->name .'<br>';
}
$unregistered = Subject::where('course_id', $course)->except($subjects);
});
看到这个错误:
"Method Illuminate\Database\Query\Builder::except does not exist."
希望有人可以提供帮助
答案 0 :(得分:4)
$student = Student::where('user_id', Auth::user()->id);
不足以获得学生模型,您只能在此处获取查询对象。
为了真正获得学生,请使用以下内容:
$student = Student::where('user_id', Auth::user()->id)->first();
如果user_id
是您的模型Student
的主键,那就更好了:
$student = Student::find(Auth::user()->id);
作为旁注,您可以使用Auth
代替Auth::id()
从Auth::user()->id
界面直接访问用户ID,从而产生:
$student = Student::find(Auth::id());