Я пытаюсь создать приложение для студентов вузов.
Моя идея - извлечь данные из базы данных, где для каждого студента должны отображаться курсы в зависимости от того, в каком семестре студент находится.Другими словами, если студент А находится во втором семестре и, скажем, курс «Базы данных» проводится только во втором семестре, для студента ИИ должен иметь на странице только «Базы данных» как приемлемый курс.
У меня есть следующие таблицы:
-пользователи
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();
});
}
-семестр
public function up()
{
Schema::create('semesters', function (Blueprint $table) {
$table->increments('id');
$table->integer('number');
$table->timestamps();
});
}
extra_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();
});
}
-курсы
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
Буду очень признателен за вашу помощь!
Заранее спасибо :)