我正在尝试为大学生构建一个应用程序。
我的想法是从数据库中检索数据,每个学生应该根据学生的学期显示课程。换句话说,如果学生A在第二学期,并且让我们说课程数据库仅在第二学期举行,对于学生A,我应该在页面上只有数据库作为符合条件的课程。
我有以下表格:
-users
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
-semester
public function up()
{
Schema::create('semesters', function (Blueprint $table) {
$table->increments('id');
$table->integer('number');
$table->timestamps();
});
}
additional_info_students
public function up()
{
Schema::create('additional_info_students', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
$table->string('first_name', 255);
$table->string('last_name', 255);
$table->integer('faculty_number')->unique();
$table->integer('group_number');
$table->integer('year');
$table->integer('semester_id')->unsigned();
$table->foreign('semester_id')->references('id')->on('semesters');
$table->timestamps();
});
}
-courses
public function up()
{
Schema::create('courses', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 255);
$table->string('language', 10);
$table->longText('description', 30000000);
$table->integer('semester_id')->unsigned();
$table->foreign('semester_id')->references('id')->on('semesters');
$table->timestamps();
});
}
-courses_assign_students
public function up()
{
Schema::create('courses_assign_students', function (Blueprint $table) {
$table->increments('id');
$table->integer('student_id')->unsigned();
$table->foreign('student_id')->references('user_id')->on('additional_info_students');
$table->integer('courses_id')->unsigned();
$table->foreign('courses_id')->references('id')->on('courses');
$table->timestamps();
});
}
这会有用吗?我似乎无法正确加入它们以获得我需要的东西。
此外,当我加入表并尝试从像student_id这样的集合中打印属性时,我收到错误的未定义属性。
public function showAll() {
$courses = CoursesAssignStudents::join('courses', 'courses_assign_students.courses_id', '=', 'courses.id')
->join('additional_info_students', 'courses_assign_students.student_id', '=', 'additional_info_students.user_id')
->select('courses.*','additional_info_students.user_id as student_id', 'first_name', 'last_name', 'faculty_number','group_number','year','additional_info_students.semester_id as sem_id')->get();
return view('courses', compact('courses'));
}
同样通过在视图中传递数据,我正在循环学习课程,而且我得到了相同的课程两次,当我应该得到它一次。
最后,我使用的是Laravel 5.4
我真的很感谢你的帮助!
提前致谢:)
答案 0 :(得分:0)
我认为你不应该这样做。 你有学生表(用户)在这里 正如你所说:每个学生都应该根据学生所在的学期展示课程。
表示
学生必须在一个学期
课程必须与一个学期有关。
因此您只需要更改此表
public function up()
{
Schema::create('course_semester', function (Blueprint $table) {
$table->increments('id');
$table->integer('semester_id')->unsigned();
$table->foreign('semester_id')->references('id')->on('semesters');
$table->integer('courses_id')->unsigned();
$table->foreign('courses_id')->references('id')->on('courses');
$table->timestamps();
});
}
关系应该是课程和学期之间的关系。 所以表格就像:
{{1}}
所以现在你有一个
学生 属于 学期 和 你有学期 有很多 课程。
因此您可以将其转换为模型中的关系,而不是使用此函数showAll()。 希望它有所帮助。