Как добавить записи в сводную таблицу в Laravel - PullRequest
0 голосов
/ 05 июня 2018

У меня есть пользователь, студент и модель предмета, и я хочу зарегистрировать студента по многим предметам.Поэтому я создал контроллер 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 голосов
/ 05 июня 2018
$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, в результате чего:

$student = Student::find(Auth::id());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...