使用相同名称Laravel在中间表中保存多个输入

时间:2016-10-22 19:46:11

标签: laravel eloquent laravel-5.2

我允许用户在添加学生时动态添加多个科目,例如,当您添加学生时,您可以添加一个科目,即数学然后您将设置其属性教师姓名,学分时间等。但是在保存时到db我需要将信息保存到我的中间表students_subjects

id | student_id | subject_id | teacher_name | credit_hours

user can add multiple fields like this

问题在于如何保存每个主题的信息。我可以将subject_id保存在隐藏字段中并获取该信息,但我怎么知道这个id与该特定主题相关并获得该ID的教师和学分。

2 个答案:

答案 0 :(得分:0)

所以你有3张桌子。和许多关系

  • 学生
  • 受试者
  • student_subject

请查看https://laravel.com/docs/5.2/eloquent-relationships#many-to-many,了解如何定义您的雄辩模型。

根据您的问题,我会考虑更改您的数据库结构。

学生hasMany科目。一个学科属于老师。

所以我将有4个表如下:

students
    - id
    - first_name
    - last_name
student_subject
    - student_id
    - subject_id
    - credit_hours (assuming this is the number of hours the student has studied?)
subjects
    - id
    - name
    - credit_hours (assuming this is the total credit value)
teachers
    - id
    - name
    - subject_id

如果教师可以教授很多科目,那么您需要添加subject_teacher数据透视表。

添加学生时,如果您可以提供值为subject_id的主题的下拉列表,那么当您选择主题时 - 您将subject_id发布回php准备插入数据库。

答案 1 :(得分:0)

如何保存每个主题的信息

DB::table('students_subjects')->insert([
    'student_id' => $input['studentId'],
    'subject_id' => $input['subjectId'],
    'teacher_name' => $input['teacherName'],
    'credit_hours' => $input['creditHours'],
]);

我可以将subject_id保存在隐藏字段中并获取该内容,但我怎么知道此ID与该特定主题相关

如果你有subject_id - 那么你就知道它与哪个主题有关。

获取该ID的教师和学分时间

$result = DB::table('students_subjects')
->select(['teacher_name', 'credit_hours'])
->where('id', $id)
->first();