Передача данных между 2 моделями в 1 функции контроллера laravel

#php #laravel #eloquent #controller

#php #laravel #красноречивый #контроллер

Вопрос:

Мне нужно получить идентификатор лекции в моей таблице student, и только после этого я могу получать данные лекции, используя этот идентификатор. Проблема в том, что $lectureID равен нулю, когда я пытаюсь применить его к лекционной модели, но когда я проверяю консоль, она получает данные. Заранее спасибо.

Контроллер

 public function getLecture($id)
{   
    $lectureID = student::select('lecture_id_FK')->where('student_id',$id)->first();

    $lectureDATA = lecture::where('lecture_id',$lectureID)->first();

    return $lectureDATA;
}
  

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

1. Вызов first метода в построителе запросов не возвращает выбранное значение, он возвращает экземпляр этой модели Eloquent с указанными выбранными полями. Это означает, что значение, передаваемое where условию, должно быть $lectureID->lecture_id_FK (хотя кажется, что это должно быть выбрано lecture_id не lecture_id_FK , но это зависит от настройки имен столбцов).

2. @Bogdan спасибо. это устраняет проблему ~

3. Это не Laravelish. Вам нужно определить взаимосвязи в ваших моделях.

4. Смотрите отношения моделей

Ответ №1:

 you can try two ways 
public function getLecture($id)
{   
    ## way 1
    $lectureID = student::where('student_id',$id)->value('lecture_id_FK');
    $lectureDATA = lecture::where('lecture_id',$lectureID)->first();

    ## way 2
    $lectureID = student::where('student_id',$id)->first();
    $lectureDATA = lecture::where('lecture_id',$lectureID->lecture_id_FK)->first();
    return $lectureDATA;
}
  

Ответ №2:

прежде чем проверить, что внутри $lectureID:

 public function getLecture($id)
{   
    $lectureID = student::select('lecture_id_FK')->where('student_id',$id)->first();
    dd($lectureID);//I believe inside will be object with lecture_id_FK
    //then just
    $lectureDATA = lecture::where('lecture_id',$lectureID->lecture_id_FK)->first();
    return $lectureDATA;
}
  

Рекомендуемый способ сделать это:

В классе Student model (рекомендую использовать заглавные буквы)

 class student 
{
     public function lecture(){
         return $this->hasOne('Applecture','lecture_id_FK','lecture_id');
     }
}
  

затем просто загрузите studen с лекцией, подобной этой

 $student = studend::with('lecture')->find($id);
$lecture = $student->lecture;