如何将记录添加到Laravel中的数据透视表

时间:2018-06-05 07:15:08

标签: php laravel eloquent

我有一个用户,学生和学科模型,我想将学生注册到许多科目。 所以我创建了一个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."

希望有人可以提供帮助

1 个答案:

答案 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());