Laravel Модель отношений между студентами и курсами - PullRequest
0 голосов
/ 12 марта 2020

У меня есть модель Студент и Курс .
Вот что я пытаюсь получить из этих моделей:

Каждый студент записывается на один курс и способ, которым я сохраняю его в базе данных, выглядит следующим образом:

Student Info..., course_id... <- which is basically taken from the Courses table  

Я хочу получить Название курса , так как у меня уже есть course_id хранится в таблице учеников.

Я разработал модель следующим образом:

//Course Model
class Course extends Model
{    
    public function student(){
        return $this->belongsToMany('App\Student');
    }
}

//Student Model
class Student extends Model
{    
    public function course(){
        return $this->hasOne('App\Course');
    }
}

Но я не знаю, как и что делать дальше, я действительно новичок в подходе Eloquent. Нужна помощь.

Я пытался получить название курса, используя код ниже:

$students = Student::all(); 

@foreach($students as $student)
   $student->course->name  
....

, но я думаю, что это неправильно, я получаю только сообщение об неизвестном столбце

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

Вместо использования ownToMany для связи со студентом в курсе. php модель,

Использование hasMany , например:

// Модель курса

class Course extends Model
{    
    public function student(){
        return $this->hasMany('App\Student');
    }
}

// Модель студента

Поскольку студент принадлежит к курсу, вы должны использовать принадлежащий вместо hasOne

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

В Чтобы оптимизировать запрос для получения всех связанных курсов, вы можете использовать с отношение загрузки Eagar , например:

$students = Student::with('course')->all(); 

@foreach($students as $student)
//If incase there are no course related to the student
   $student->course->name ?? null   
....
0 голосов
/ 12 марта 2020

Предыдущий код:

//Course Model
class Course extends Model
{    
   public function student(){
      return $this->belongsToMany('App\Student');
   } 
}

//Student Model
class Student extends Model
{    
   public function course(){
      return $this->hasOne('App\Course');
   }
}

Заменить на:

//Course Model
 class Course extends Model
 {    
    public function students(){
       return $this->hasMany(Student::class); // '\App\Student' also ok
    } 
 }

 //Student Model 
 class Student extends Model
 {    
    public function course(){
      return $this->belongsTo(Course::class);
    }
  }

Почему принадлежит модели студента?
Внутри: когда первичный ключ таблицы назначается в другой таблице в качестве внешнего ключа, необходимо добавить принадлежность к этой таблице назначения.
Здесь первичный идентификатор таблицы курсов назначается в качестве внешнего ключа в таблице Студентов

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