Отношения Laravel: Как мне получить все курсы, к которым относится набор оценочных тестов?

#php #laravel #relationship

Вопрос:

Я не профессионал ни в PHP, ни в Laravel, и я думаю, что загнан в угол. В моем приложении для оценки у меня есть курсы, уроки и оценочные тесты. Тест оценки имеет отношение «много к одному» к уроку. урок также имеет множество взаимосвязей с курсом. Теперь возникает проблема, как мне получить все курсы, к которым относится коллекция тестов оценки? Как показано в приведенных фрагментах кода, я попытался обойти это, вручную просмотрев коллекцию и сохранив курсы в массив, но получил какую-то странную ошибку.

Попытка получить свойство «курс» не-объекта

Вот моя проблемная функция

 public function index()
    {
        $attempts=AssessmentAttempt::all();
        $i=0;
        $courses=array();
        foreach ($attempts as $attempt) {
            // dd($attempt->lesson->course); 
            $courses[$i  ]=$attempt->lesson->course;
        }
        dd(array_unique($courses));
        return view('achievements.index', ['attempts'=>$attempts, 'courses'=>$courses]);
    }
 

Оценочная модель

 public function lesson()
    {
        return $this->belongsTo(Lesson::class);
    }
 

Модель урока

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

public function assessmentAttempts()
    {
       return $this->hasMany(AssessmentAttempt::class);
    }
 

Ответ №1:

в assesment_modal определите связь с курсом и создайте столбец идентификатора курса в качестве внешнего ключа в таблице assesment_model

верните $this->hasMany(Курс::класс, «иностранный ключ»);

также разработайте отношение в модели курса

верните $this->Принадлежит(Assesment_Model::класс);

Комментарии:

1. спасибо, но я пытался избежать этого. Оценка связана с уроком, который, в свою очередь, связан с курсом. Я прыгал, есть другой способ