Как исправить ошибку вставки отношения laravel eloquent многие ко многим в неправильной таблице - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть класс модели с именем CourseSession, и его таблица course_session, и у меня есть другая модель с именем Student, и ее таблица student, и в каждой сессии много студентов, и каждый студент может бытьво многих сессиях.Итак, я создал третью таблицу с именем student_session с student_id, session_id, presence и столбцами меток времени laravels.

Для создания сеанса необходимо иметь список студентов, и я получаю их от $request вот так:

$validatedData = $request->validate([
    'students' => 'required',
]);

students - это массив идентификаторов студентов!

это моя CourseSession модель:

class CourseSession extends Model
{
    protected $table = 'course_sessions';
    protected $guarded = [];

    public function course()
    {
        return $this->belongsTo('App\Course');
    }

    public function students()
    {
        return $this->belongsToMany('App\Student', 'student_session','session_id', 'student_id');
    }
}

и это моя модель студента:

class Student extends Model
{
    protected $guarded = [];

    public function courses()
    {
        return $this->belongsToMany('App\Course');
    }

    public function exams()
    {
        return $this->belongsToMany('App\Exam');
    }

    public function sessions()
    {
        return $this->belongsToMany('App\CourseSession', 'student_session', 'student_id', 'session_id');
    }
}

Я создаю сессию так:

$session = new CourseSession();
$session->course_id = $course->id;
$session->save();

и я сохраняю студентов таким образом:

$sessions = $session->students()->create(['session_id' => $session->id, 'student_id' => 1, 'presence' => 1]);

но я получаю эту ошибку:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'session_id' in 'field list' (SQL: insert into `students` (`session_id`, `student_id`, `presence`, `updated_at`, `created_at`) values (25, 1, 1, 2019-04-28 14:24:48, 2019-04-28 14:24:48))

в соответствии с ошибкой, он пытается записать данные в таблицу studentsно я хочу написать их на student_session столе!

что не так в моих кодах?

1 Ответ

1 голос
/ 28 апреля 2019

Для этого вы хотите использовать attach () вместо create().

$session->students()->attach(1, ['presence' => 1]);

. В приведенном выше примере 1 - это student_id.Вам не нужно указывать session_id в качестве вызова для модели Session.Массив в конце - это любые дополнительные данные, которые вы хотите добавить в сводную таблицу.

Поскольку у вас есть дополнительные данные в вашей сводной таблице student_session, возможно, также стоит добавить это в вашу belongsToMany отношения, например

public function sessions()
{
    return $this->belongsToMany('App\CourseSession', 'student_session', 'student_id', 'session_id')
        ->withPivot('presence')
        ->withTimestamps();
}

Это будет включать в себя также столбцы presence и отметки времени в сводных данных (очевидно, вам не нужно делать это, если вы этого не хотите).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...